2차원 배열의 주소값에 대한 질문입니다.
조회수 1548회
#include <stdio.h>
int main()
{
int arr[2][4];
for (int i = 0; i < sizeof(arr)/sizeof(int); i++) {
scanf("%d", &arr[0][0] + i); // ok
// scanf("%d", &arr + i); // error
}
printf("arr size : %d\n", sizeof(arr)/ sizeof(int));
for (int i = 0; i < sizeof(arr) / sizeof(int); i++) {
printf("%d ", arr[0][i]);
}
return 0;
}
배열에 값을 저장할 때, &arr[0][0] +i 와 &arr + i 가 결과가 다릅니다. 첫 주소 같을거라 생각했는데 말이죠. 어떻게 다른건지 궁금합니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
&arr[0][0] +i
와 결과가 같은건arr[0]+i
겠지요?&arr[0][0] +i
와&arr + i
가 다른 이유는 아래에 적어놓겠습니다.
&arr[0][0]+i
는(&(arr[0][0]))+i
순으로 연산자가 적용되어,int *
타입 입니다.&arr+i
는(&arr)+i
순으로 연산자가 적용되어,int(*)[2][4]
입니다.#include <stdio.h> int main() { int arr[2][4] = {{1,2,3,4},{5,6,7,8}}; printf("%d\n", &arr[0][0]); printf("%d\n", &arr[0][0] + 1); printf("%d\n", &arr[0]] + 1); printf("%d\n", &arr); printf("%d\n", &arr + 1); return 0; }
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력