C語言,函式指標定義中實參表為空的問題

2021-05-13 22:47:36 字數 1895 閱讀 3599

1樓:gta小雞

如果函式宣告是void fun(int n,char *s)

那麼指向該函式的指標宣告也必須是void (*pf)(int,char*)

void (*pf)()是錯誤的,不能用於指向該函式。

2樓:愛永遠都沒完

函式指標只是個指標,關鍵是呼叫時,引數是否一致。

c語言函式宣告中將函式指標引數設定為null的預設值

3樓:匿名使用者

指定形參預設值是c++的語法,標準c是不支援這種語法的。

使用c++語法,通常可以儲存檔案時使用cpp字尾儲存。

另外,形參的預設值是在宣告函式原型的時候指定,不是在函式定義的時候指定。

c語言中指標作為實參使用swap函式的問題。

4樓:匿名使用者

c語言中形參與實參的關係是:形參是實參的值副本。無論引數的型別是什麼,傳回遞到子函式中的形參只是答實參的值。

所以,在改變形參變數自身的值時,是與實參無關的。換句話說,形參的改變不會影響到實參。

但,如果引數型別是指標型別,則可以通過對指標變數所指向的地址中的資料進行修改,達到改變實參地址中的資料目的。

因此,使用swap函式進行資料交換時,必須保證兩點:

引數必須是指標型別,指向待交換的資料

交換時,必須交換地址中的資料,而不是交換地址本身。

參考**:

//錯誤的交換**1

void swap1( int a, int b ) //引數不是待交換資料的指標

//錯誤的交換**2

void swap2( int *a, int *b )//正確的交換**

void swap( int *a, int *b )

5樓:匿名使用者

你還沒了抄解值傳遞和地址傳遞的本襲質啊。

首先bai p ---> i q ----> j (p和duq分別存放i和j的地址)你呼叫swap函式。

就會zhi把實參的值複製一dao份給形參。也就是說a ----> i b ---->j。現在你在swap裡面使用t指標交換了

a和b,也就是a ---> j b---->i,也就是說你交換的是指標的值!但是你想想主函式main當中p和q交換了嗎??你只是複製了一份值給形參,自己本身沒改變。

你可以這樣實驗一下:

在swap函式中輸出看一下:printf("a:%d\tb:

%d\n",*a,*b); //你可以看一下結果是交換了的。不過隨著swap函式的結束而釋放了a,b的空間,然後回到main函式p和q的值還是原來的。

6樓:匿名使用者

你的這個baiswap中指標引數 *a,*b 已經退du化成普通的zhi區域性引數了dao,也就是說a和b同樣也只是形專參而已,屬只不過披了個指標的外衣,在函式體內交換的只是這兩個指標本身的拷貝,而不是它們指向的內容,因此需要用解除指標的方式來交換它們指向的內容。其實這裡提供指標做引數,只是為了讓你有辦法去訪問它們的實際指向內容(實參),指標本身(形參)的交換沒有任何意義。有兩種改法:

7樓:匿名使用者

void swap(int*a,int*b)

改為void swap(int*a,int*b)

c語言傳遞函式指標引數的時候能否傳遞null

8樓:匿名使用者

語法上講沒有問題,但實際上來說一般來說是不穿null的,因為沒什麼意義。

如果真出現了要小心。通常要對指標進行判斷是否為空

在C語言中,定義函式的形參和實參之間具體是如何進行引數傳

函式中的形參和呼叫時的實參都是陣列名時,傳遞方式為 地址傳遞 此時形參和實參共用同一段記憶體 都是變數時,傳遞方式為 值傳遞 實參與形參互不影響 主要有兩種 1 值傳遞 在函式呼叫時,將實參的值複製一份傳遞到呼叫函式中,這樣,如果在呼叫函式中修改了引數的值,也不會影響到實參的值。2 引用傳遞 與 1...

C語言函式及指標問題

代入變數和值的作用域不一樣,也就是,如果通過變數代入,此時不會改變變數的值。如果通過指標 引數 的形式代入,則會可以改變指標指向的變數的值,但是地址不可以改變。如果想改變地址呢,就得用雙指標,或者說第二層地址代入。這個理解起來其實很簡單 只要記住一點,實參和形參不在一個記憶體地址中就可以,改變形參不...

函式定義怎麼解釋,C語言 函式定義概念問題

就說每個函式,都是在其它程式裡呼叫這個函式名,來執行這個函式的 簡單說,有返回值的函式稱呼叫函式。詳見 付費內容限時免費檢視 回答函式的定義 在某一個變化過程中有兩個變數x和y,設變數x的取值範圍為數集d,如果對於d內的每一個x值,按照某個對應法則f,y都有唯一確定的值與它對應,那麼,把x叫做自變數...