C指針原理(15)-C指針基礎
阿新 • • 發佈:2018-12-03
簡單 引用 修改 代碼 操作符 不能 指針 ret 都是 簡單C指針
指向整數的指針,以及指針的指針
myhaspl@myhaspl:~?%?vim?test1.c #include?<stdio.h> int?main(void){ ????????int?x; ????????x=128; ????????int?*myp=&x; ????????int?**mypp=&myp; ????????printf("x:%d\n",x); ????????printf("myp:%u\n",myp); ????????printf("mypp:%u\n",mypp); ????????return?1; }
上面程序定義了一個int型的整數,然後定義了2個指針,1個是myp,另1個是mypp。
myp和mypp都是指針變量,但指向的內容是不同的,myp指向x的地址,mypp指向myp的地址,通過myp可以找到x,而通過mypp則不能立即找到x,mypp先找到myp,然後再通過myp找到x,因此,mypp也稱為指針的指針。
myhaspl@myhaspl:~?%?make
cc?test1.c?-o?mytest
myhaspl@myhaspl:~?%?./mytest
x:128
myp:4294957796
mypp:4294957784
myhaspl@myhaspl:~?%?
通過解引用操作符*提取指針指向的內容。
myhaspl@myhaspl:~?%?./mytest
x:128
myp:4294957796
mypp:4294957784
*myp:128
**mypp:128
代碼為
#include?<stdio.h> int?main(void){ ????????int?x; ????????x=128; ????????int?*myp=&x; ????????int?**mypp=&myp; ????????printf("x:%d\n",x); ????????printf("myp:%u\n",myp); ????????printf("mypp:%u\n",mypp); ????????printf("*myp:%d\n",*myp); ????????printf("**mypp:%u\n",**mypp); ????????return?1; }
*myp提取的是x的內容
而**mypp提取的是也是x的內容
那麽*mypp提取的內容什麽呢
是myp指針變量本身的內容,即x的地址。
可修改上述程序驗證一下
#include?<stdio.h>
int?main(void){
????????int?x;
????????x=128;
????????int?*myp=&x;
????????int?**mypp=&myp;
????????printf("x:%d\n",x);
????????printf("myp:%u\n",myp);
????????printf("mypp:%u\n",mypp);
????????printf("*myp:%d\n",*myp);
????????printf("**mypp:%u\n",**mypp);
????????printf("*mypp:%u-myp%u\n",*mypp,myp);
????????return?1;
}
??????????????????????????????????????????????????
程序執行結果:看最後1行
myhaspl@myhaspl:~?%?./mytest
x:128
myp:4294957796
mypp:4294957784
*myp:128
**mypp:128
*mypp:4294957796-myp4294957796
myhaspl@myhaspl:~?%?
C指針原理(15)-C指針基礎