작성
·
206
0
#include <stdio.h>
int main()
{
//배열의 이름은 배열의 첫번째 인덱스 주소
int arr1[] = { 101, 102, 103 };
int arr2[] = { 104, 105, 106 };
printf("%p, %p, %p\n", &arr1, arr1, &arr1[0]);
int arr3[2][3] = { {1,2,3},{4,5,6} };
printf("%p, %p, %p\n\n", &arr3, arr3, &arr3[0]);
//포인터의 이름은 할당된 주소
//&포인터는 포인터도 변수니까 그에 대한 주소(자료형에 관계 없이 메모리 주소 사이즈)
int* prt = arr1;
printf("%p, %p, %p\n", &prt, prt, arr1);
int* parr[2] = {arr1[0],arr2[1]};
printf("%p, %p, %p\n", &parr, parr, arr1);
return 0;
}
안녕하세요.
10.14 강의 내용 질문은 아니지만 이 강의부터 진도를 못나가고 있어요 ㅠ
'이름'에 대한 강조가 많아 혼란스러워 질문 드립니다.
1.
&배열이름($arr1)에서 배열 이름이 주소인데 앞에 &을 붙여 사용하는 경우도 있나요?
사용할 경우 그냥 arr1과 같은 주소 나오는 건가요?
2.
포인터에서 &prt와 prt 차이는
포인터도 변수니까 그에 대한 주소와
포인터에 할당된 주소 차이로 봐도 될까요?
3.
그런데 포인터[] 배열에서는 &parr, parr의 주소 같게 나오는데 이유가 궁금합니다. 이 주소는 변수 주소인가요?
늘 감사합니다.
답변 1
0
&배열이름($arr1)에서 배열 이름이 주소인데 앞에 &을 붙여 사용하는 경우도 있나요?
사용할 경우 그냥 arr1과 같은 주소 나오는 건가요?
>> 보통 배열의 이름이 곧 배열의 주소이기 때문에 굳이 &를 붙여 사용하지는 않는 것 같습니다.
결과는 첨부하신 코드를 실행해보면 알 수 있는데요, &arr1, arr1에 동일한 주소가 찍힘을 볼 수 있지요.
네, 그렇습니다.
1번의 답과 같습니다. 다만 parr자체가 주소이기 때문에 &parr로 사용하는 것보다 parr로 사용하는 것이 더 나은 용례입니다.
헷갈렸던 점이 '포인터 배열'을 포인터로만 생각해 포인터처럼 주소가 출력될줄 알았는데
배열처럼 주소가 나와서 였던거 같아요. 배열이라 생각하니 정리가 됩니다.
답변 감사합니다.