c函式程式設計之指標引數和指向指標的指標引數

2021-07-11 20:02:44 字數 712 閱讀 6061

我們給出兩個函式如下:

void getmem1(char *p) 

void getmem2(char **p)

int main()

為什麼會這樣呢?

其實這個問題理解起來有點繞,關鍵是理解變數作函式形參呼叫的時候都是要分配乙個副本,不管是傳值還是傳址。

當我們使用getmem1的時候,str是乙個指標,我們建立了臨時變數p,這時p和占用不同位址空間,只是str的值和p的值一樣。這時候,給p建立乙個100char的動態記憶體空間,然後把這個空間的開始的位址的值存到p裡面去了。這時,p的值變成了指向這100char的位址值。因為p和str用的是不同的位址空間,str的值沒變還是null;

當我們使用getmem2的時候,&str傳遞給函式的是儲存指標str的位址,也就是指向指標str的指標,然後這個值賦給p,此時p和str的記憶體空間還是不同的。通過*p我們可以獲取到str指標。然後改變 *p的值,此時str的值也跟著改變了,變成了指向乙個100char的記憶體空間的位址。所以後面的操作成功。

說了這麼多,我覺得最重要的是理解指標的概念,指標的值是乙個位址,這個位址是一段記憶體空間的起始位址。指向指標的指標的值也是乙個位址,這個位址是儲存另乙個指標值的記憶體空間的起始位址。

在指標做引數傳遞給函式的時候:只能保留指標指向的物件(*p)改變的值。不能保留指標本身(p)所做得修改。在需要修改指標本身的時候,需使用指向指標的指標作為引數。

C程式設計 指標 用指向函式的指標做函式引數

題目 有兩個整數,輸入a和b。使用者輸入1 3,當輸入1時,給出a和b中的最大值,當輸入2時,給出最小值,當輸入3時,給出和。用指向函式的指標做函式引數 include void main intfun int x,int y,int p int,int int max int x,int y in...

指向函式的指標,指向函式的指標作為函式引數

1.基本法 include pragma warning disable 4996 pragma warning disable 4715 指向函式的指標作為函式的引數 有兩個整數a,b,讓使用者輸入1,2或者3,當輸入1時,給出相對大值,當輸入2時,給出相對小值,當輸入3時,給出兩者之和 1.可以...

C 指向函式的指標和返回指標的函式

每乙個函式在計算機內部都有儲存單元,通過記憶體可以反問到這個函式,指標可以指向記憶體中的某乙個位置,可以用指標指向函式的初始位置。一般定義形式 資料型別 指標 參數列 資料型別指的是函式返回的資料型別,右側是參數列,指標指向函式的引數型別。注意與返回指標的函式之間的區別 int p int 是乙個指...