1. 程式人生 > >C指針原理(15)-C指針基礎

C指針原理(15)-C指針基礎

簡單 引用 修改 代碼 操作符 不能 指針 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指針基礎