指標是什麼?指標是程式資料在記憶體中的位址,而指標變數是用來儲存這些位址的變數。
舉例
int c=2,d=3;
int *pc=&c;
pc是指標變數的儲存內容,也就是c的位址
*pc就是對指標的解引用,取出這個c這個位址裡面的值
#include int c=2,d=3;
int *pc=&c; //一級指標指向c
int **ppc = &pc; //二級指標指向一級指標pc (指向指標的指標)
int main()
執行結果為:
許多初學者在使用一級指標的時候基本沒什麼問題
例如int a=10;
int fun(int *p)
return ( *p+=10);
在呼叫是時需要定義乙個變數int b=fun(&a);
當二級指標做形參的時候,呼叫該函式時實參應該以什麼格式填寫?
int a=1;
int b=2;
int fun1(int **p1,int *p2)//二級指標做形參 後面舉例用
int fun2(int x,int y)
函式fun1的第乙個形參是**p1 二級指標 , 第二個是*p2 , 最終的目的是將兩個變數相加
我們對比fun2, 這個函式的形參都是普通變數,呼叫時直接int sum=fun2(a,b),最終的目的是將兩個變數相加.
通過對比,我們發現**p1代表乙個變數,*p2也代表乙個變數。
我們來分析下*p這個東西。
int a=2;
int b=3;
int *p=&a;
我們可以知道 p存放的值就是變數a的位址,*(位址)就相當於把這個位址的值取出來。
假如a的位址等於0x123456, p也==0x123456, b=(*p)==*(a的位址)==a的值;通過這步b就等於2;
我們回到fun1函式,**p怎麼才能轉換 為乙個變數呢,看下圖
一級指標只有一層解引用——*(位址)則得到乙個變數,
二級指標內層解引用得到乙個位址add2,對add2解引用得到乙個變數
*(add1)=add2,*(add2)=變數 ——> *(*(add1))=變數
所以fun1的第乙個實參應該填乙個位址add1 對add1解引用得到add2,對add2解引用得到乙個變數
#include int c=2,d=3;
int *pc=&c;
int **ppc = &pc;
int fun1(int **p1,int *p2)//二級指標做形參 後面舉例用
解析一下程式二級指標的流程
**指標或者多級指標以此類推,凡是涉及到指標解引用的*(x),x都是乙個位址。
一級指標,二級指標作為函式輸出形參的正確使用方法
data 20181218 一級指標函式輸出形參的正確使用方法 1 用於將函式內部的位址拷貝到函式外部已經分配的位址,有兩種做法,參照test demo has no ininer static 和test demo has local var 經過 對比可以發現test demo has no i...
二級指標的使用例項
main函式將乙個空指標的位址 二級指標 傳入多個子函式,每個子函式都需要新增新節點,形成鍊錶,要求不改變首節點所指向的位址,typedef struct id node t id node t void test1 id node t p else return void test2 id nod...
二級指標和指標引用函式傳參(C )
在函式的使用過程中,我們都明白傳值和傳引用會使實參的值發生改變。那麼能夠通過傳指標改變指標所指向的位址嗎?在解決這個問題之前,也許我們應該先了解指標非常容易混淆的三個屬性 指標變數位址 p 指標變數指向的位址 p,儲存資料的位址 指標變數指向的位址的值 p 當我們將指標變數與其它變數比較之後就會發現...