int r = 50;
int *p;
int **k;
int ***m;
printf("r: %d ", r);
p = &r;
k = &p;
m = &k;
***m = 100; //line 9
printf("r: %d\n", r);
當只有一個指針,我可以理解,我們採取100,我們在它這是正在舉行的指針的地址賦給變量。但是,當我們使用多個指針級別執行此操作時,究竟發生了什麼? (第9行)指針的指針如何在這個C代碼中工作?
int r = 50;
int *p;
int **k;
int ***m;
printf("r: %d ", r);
p = &r;
k = &p;
m = &k;
***m = 100; //line 9
printf("r: %d\n", r);
當只有一個指針,我可以理解,我們採取100,我們在它這是正在舉行的指針的地址賦給變量。但是,當我們使用多個指針級別執行此操作時,究竟發生了什麼? (第9行)指針的指針如何在這個C代碼中工作?
int *p=&r
:p
是pointer-to-int
,它需要的address of r
。
int **k=&p
:k
是pointer-to-(pointer-to-int)
,它需要的address of p
。
int ***m=&k
:m
是pointer-to-(pointer-to-(pointer-to-int))
,它需要的address of k
。
當你做***m = 100
,你是「解開」的指針,最後你最終只是int
。
發生了什麼事,當你試了一下,用你的調試器逐句通過,在每一步製作varible值的注意事項? –
@MartinJames首先是50,而不是100.但是,分配給第9行我想知道的是什麼。 – madkobra
@MartinJames:問題是還有誰不使用''*** ... – Olaf