배열과 포인터 변수의 출력
꽃초롱
2023.04.01
질문1.
int a[3][2] = {1,2,3,4,5,6};
printf(%d\n, *(*(a+2)+2));
를 했을때
결과값이 1245120이 나오는 이유가 뭔가요????
2차원 배열에서 *(a+2)이면 주소값이 어떻게 변하는거죠 ㅠㅠ질문2.printf(%d\n, (*(a+2))[1]);
의 출력값이 6이 나오네요 ㅠㅠ
여기서 제가 예측하기로는 *(a+2) == a[3][0]가 되는건가요??? 그래서
*(a+2)[1]이 6인건가 ㅠㅠ질문3.
여기서 int *p = a[1]; 이라고 하면
a[1]은 3,4 두 변수가 가지고 있어서 둘이 합쳐서 원래 8바이트인데printf(%d\n, sizeof(*p)); 를 하면
*p를 int 타입으로 선언을 해서 결과값이 4가 나오는건가요???질문4.
근데 왜 printf(%d\n, *(p+1));는 결과값이 4가 나올까요 ㅠㅠㅠ
*(p+1) 했으면 주소값이 나와야하는거 아닌가요???
아 마구 햇갈리네요 ㅠㅠㅠㅠ질문이 너무 난잡하지만 답변 부탁드립니다 ㅠㅠ
-
박애교
*(*(a+2)+1))
위는 a[2][1]과 같습니다.
1. *(*(a+2)+2))는 a[2][2]로서 두번째 차원의 인덱스가 범위를 벗어나서 쓰레기 값이 출력되었습니다.
3. p는 a[1]을 가리키고 있고, *p는 a[1][0]을 의미합니다. a[1][0]은 int 타입이죠.