작성
·
256
0
arr = arr[0] = &arr[0] = &arr[0][0] = parr[0]인건 알겠습니다. 그런데 똑같은 배열형태인데 &parr[0]와 parr[0]가 왜 다른지는 이해를 못하겠습니다.
15:30에서 강의에서는 이에 대한 자세한 이유를 알려주기 힘드니 10.1강의와 10.12강의를 보고 오라고 하셨지만 여기를 봐도 이곳에선 배열을 가지고 이중포인터를 소개하는게 아니고 int형 변수를 가지고만 설명을 해서 아무리 봐도 10.13의 15:00 부분이 잘 이해가 안됩니다.
답변 2
2
영상을 다시 봤더니 꼭 확인해보고 넘어가시라고 강조를 해놓은 부분이네요.
int *parr[2];
에서 parr은 int 자료형에 대한 주소를 담을 수 있는 2개짜리 배열 parr[2] 입니다. 글로 적으면 복잡해 보이지만 결국 parr은 주소 두개 담을 수 있는 배열(=그 메모리 공간의 첫 주소)입니다. 그러니까 저장되는 값이 int가 아니라 주소입니다.
parr[0]은 거기에 저장되어 있는 주소값이고 &parr[0]은 주소값을 저장하는 메모리의 주소입니다.
주소값을 저장하는 변수의 주소라는 개념은 처음에는 당연히 헷갈리실 수 있습니다. 사람마다 이해하는 방법이 다르기 때문에 제 강의 앞부분을 보셨음에도 불구하고 아직 이해가 안가신다면 이중포인터 관련 자료들을 더 찾아서 보시는 것을 권장합니다.
1
안녕하세요 :)
arr와 arr[0]는 다릅니다.
arr는 arr[0]의 주소를 가리키고 있는 것이지요.
달리 말해 arr는 arr[0]와 같은게 아니라 arr[0]의 주소와 같습니다.
아래 코드를 직접 돌려보며 확인해보세요.
#include <stdio.h>
int main() {
int arr[2] = { 1, 2 };
printf("%p\n", arr[0]);
printf("%p\n", arr);
return 0;
}
마찬가지로
parr[0]는 parr가 저장하고 있는 첫 번째 원소 자체(parr가 저장하고 있는 첫 번째 포인터)를 의미하고, &parr[0]는 그 주소를 의미합니다.
혹시 이해가 안가신다면 댓글 달아주세요 :)
감사합니다.
printf("%p\n", &parr[0]); // 다른 주소값을 출력
printf("%p\n", parr[0]);
printf("%p\n", arr);
printf("%p\n", &arr[0]);
printf("%p\n", arr[0]);
printf("%p\n", &arr[0][0]);
강의에 나와있는 코드입니다 저기서 첫번째줄을 제외하고는 전부 같은 주소값을 출력하는 것은 이해했습니다. 그런데 &parr[0]와 parr[0]의 주소를 출력하는 값이 서로 다르다는 것이 이해가 안갑니다.
똑같이 배열 형태인 &arr[0]의 주소값과 arr[0]의 주소값은 같은데 말이죠.
감사합니다