• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

문자열 포인터, 인티저 포인터

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

답변을 작성해보세요.

1

Soobak님의 프로필

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 배열은 단순히 첫 번째 원소의 주소로 해석되어 출력되는 것입니다.