-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
문자열 포인터, 인티저 포인터
23.12.20 21:19 작성 23.12.20 21:30 수정 조회수 89
2
인터저로 포인터 정의하면 예를 들어서
int a[] = {1,2,3}하고
a만 출력해보면 a가 사실상 포인터이기때문에 첫번째 항의 주소만 출력되는데
문자열 포인터에서
char b[] = "jack"에서
똑같이 b만 출력하면 왜 j의 주소가 출력이 안되고 jack이 다 나오는 건가요 ?
답변을 작성해보세요.
1
Soobak
2023.12.21
안녕하세요, 답변 도우미 Soobak 입니다.
int
배열과 char
배열이 출력될 때 처리되는 방식이 다르기 때문입니다.
말씀하신 것처럼, int a[] = {1, 2, 3};
에서 a
는 배열 a
의 첫 번째 원소의 주소를 가리킵니다.
C언어에서 배열의 이름은 포인터와 호환이 되는 형태이므로, printf()
함수나 다른 출력 함수로 a
를 출력하려고 하면, 메모리 주소가 출력됩니다.
반면, char b[] = "jack";
와 같은 문자열은 C언어에서 특별하게 취급됩니다.
문자열은 널 문자('\0'
)로 끝나는 연속된 문자들의 배열로 취급되기 때문에, printf()
함수와 같은 표준 출력 함수들은 char
포인터를 문자열로 해석하고, 널 문자가 나타날 때까지 연속된 문자들을 출력합니다.
따라서, b
를 출력하면, b
가 가리키는 주소(즉, 'j'
의 주소)부터 시작해서 널 문자가 나타날 때 까지 'j', 'a', 'c', 'k', '\0'
문자들이 출력됩니다.
요약 드리자면, int
배열과 char
배열이 출력 될 때, C언어에서 문자열을 처리하는 방식 때문에 char
배열은 문자열로 해석되어 배열 전체가 출력되고, int
배열은 단순히 첫 번째 원소의 주소로 해석되어 출력되는 것입니다.
답변 1