• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

포인터와 배열의 이름의 차이가 궁금합니다.

24.02.29 22:39 작성 24.02.29 22:43 수정 조회수 126

1

상수 포인터와 배열의 이름은 유사한 개념이라고 파악하고 있었는데, sizeof(배열의 이름)은 배열의 크기를 출력해준다는 점에서 약간의 차이가 있다는 점을 알게 되었습니다.

또한, 참조 연산자를 통한 결과 또한 포인터의 경우, 메모리를 확인한 결과 해당 주솟값을 가리키고 있는 다른 주소의 값을 가지고 있었지만, 배열의 이름은 동일한 주솟값이 결과로 나오는 것을 확인할 수 있었습니다.

제가 이해한 바로는 배열의 이름 자체는 배열의 시작 주소이기에 'test2' 는 'H'라는 배열의 시작 주소를 가리키고, '&test2'는 "Hello World"라는 배열 자체 주소를 가리키는 것이라고 판단을 했는데, 이것이 맞는 이해인지 궁금합니다.
두 개념이 비슷하지만 약간의 차이가 있는 것 같은데 이 차이에 대해서 설명해주시면 감사하겠습니다.

답변 1

답변을 작성해보세요.

1

우선 저 대신 답변도 해주셔서 고맙다는 인사부터 드립니다. 😄

test2는 char[12] 배열에 부여한 이름이며 그 자체가 메모리의 주소입니다. 따라서 'H'라는 배열의 시작 주소가 아니라 'H'가 저장된 메모리의 주소입니다. 그리고 &test2는 char[12] 배열에 대한 주소 입니다. 이 주소에 +1을 하면 char[12]만큼 증가 합니다. 다차원 배열 연산을 풀어쓸 때 이러한 이슈를 경험할 수 있습니다.

&test2가 "Hello World\0"이 저장된 메모리의 주소인 것은 맞습니다. 그러나 자료형이 char[12]라는 사실을 잊어선 안 됩니다! 다음 코드의 실행 결과를 확인해보시기 바랍니다. 좋은 공부가 될 것입니다.

 

	char test2[] = { "Hello World" };
	printf("%zd\n", sizeof(test2));
	printf("%zd\n", sizeof(*(&test2 + 1)));

 

그리고 2차원 배열을 간접지정 연산자 및 덧셈 연산으로 풀어써보기 바랍니다. 그러면 모두 이해될 것입니다. 😄