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叫做自變數...