더블 포인터가 궁금해요....

hwoney의 이미지

만약에

int **A;
int *C;

이렇게 선언합니다...
그 다음에

A=&C;
*A=C;

ㅇ ㅣ 두가지가 다른 것 같더라구요...
저는 처음에 같다고 생각하고 프로그래밍 했는데
위에꺼는 에러가 뜨고
밑에꺼는 잘 되던데요....

왜 위에꺼가 안되는지 가르쳐주세요~

Necromancer의 이미지

A=&C;

이건 A 자신에다 C의 주소를 저장하는거니까요. 잘 됩니다.
하지만

*A=C;

이것의 의미는 A라는 변수가 가리키고 있는 장소에다가 C라는 변수가 가지는
값을 넣으라는 소리입니다. 이경우 만일 A가 가리키고 있는 장소가 NULL이거나
이상한 장소일경우, 초기화 안한경우.... 이럴때는 문제 생깁니다. 간단한 경우는
세그폴트로 끝나는 경우에서 최악의 경우에는 malloc() 관리 매커니즘이
깨지거나 해서 프로그램이 아주 이상해지는 것까지 다양하죠.

Written By the Black Knight of Destruction