|
: 그냥 * 하나 붙은거는 그변수의 주소값을 가지는걸루 알구있는데요
그렇다고 할수있습니다.포인터에 관한 제 나름대로의 해석으론
int a=100;
int* b;
에서 int* 형이란 어떤 int형변수의 주소를 받을수 있는 int형포인터변수 라고 생각하고있습니다.
즉 b는 & 라는 번지연산자를 써서 b=&a 라고 코딩이 가능한 변수라는거죠.
: ** 두개붙은거는 어떤변수의 주소값을 가지고있는 포인터의 주소값을 가지고있는건가요?
그렇다고 생각합니다만...
int** c;
에서 int** 형이란 어떤 int형포인터변수의 주소를 받을수 있는 int형포인터변수 라고 생각하고있습니다.
즉 c=&b 의 코딩이 가능한 변수라는거죠.
c=&(&a) 뭐 이렇게 코딩 할순없고요..(에러나니까요^^)
int* 나 int** 나 int*** 나 모두 같은 동급의 포인트 변수라고 생각합니다.(나름대로 제생각임)
int a=100;
int*b=(int*)100;
int**c=(int**)100;
int***d=(int***)100;
위와 같이 코딩 해보면 에러없이 모두 메모리상의 어떤 번지에 100 이라는 숫자가 저장되지요.
다만 그번지를 프로그램 코딩시 변수에 대입하여 사용하려면
a 는 int* aa 로 선언해서 aa=&a 로 사용해야하고
b 는 int** bb 로 선언해서 bb=&b 로 사용해야하고
c는 int*** cc 로 선언해서 cc=&c 로 사용해야하고
d는 int**** dd 로 선언해서 dd=&d 로 사용해야 그 번지를 프로그램에서 사용할수있다는 거죠.
그게 c 의 규칙이니까 그렇게 해야하고 그렇게 밖에는 할수가 없는거 라고 생각...^^
물론 d 의 번지를
int e;
e=(int)&d; 로 얻어올수는 있습니다.
printf("%d",e); 나 printf("%p",d); 같게 나올겁니다.아마...
하지만 결국 e 를 프로그램의 코딩으로 써먹으려면
int**** f=(int****)e 로 형을 맞춰줘야 컴파일 에러 없이 코딩한다는 말씀입니다.
음..뭔가 뒤죽박죽인 느낌이 있네요(형변환을 막^^ )
써놓고 보니까 좀 이상한데 쓴게 아까와서 그냥 confirm 누룰랍니다.
제가 포인터를 많이 공부한게 아니라서 잘못됬으면 리플 바랍니다.^^
김경래 님이 쓰신 글 :
: 안녕하세요
: 궁금한것이 있어서 이렇게 글을 올리게되었습니다.
:
: 그냥 * 하나 붙은거는 그변수의 주소값을 가지는걸루 알구있는데요
: ** 두개붙은거는 어떤변수의 주소값을 가지고있는 포인터의 주소값을 가지고있는건가요?
: 그럼 즐거운하루되시구요 꼭 가르쳐주세요^^
:
|