二級指標作為形參簡單例項分析

2021-08-25 05:22:02 字數 1789 閱讀 9054

指標是什麼?指標是程式資料在記憶體中的位址,而指標變數是用來儲存這些位址的變數。

舉例

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 當我們將指標變數與其它變數比較之後就會發現...