所謂對應其實是參數(shù)形式上的對應。上面的兩個函數(shù)都要求傳遞一個指針類型。并且還是雙指針類型。c的編譯器執(zhí)行的是字面上的語義檢查,并不實際追究這個參數(shù)真是子函數(shù)需要的。而你傳遞參數(shù)的正確與否在運行時才能反映出來。尤其是指針,傳遞一個錯誤的指針基本會導致你的程序運行不成功,或者直接終止運行。
成都創(chuàng)新互聯(lián)是一家專業(yè)提供小店企業(yè)網(wǎng)站建設,專注與成都做網(wǎng)站、網(wǎng)站設計、外貿(mào)營銷網(wǎng)站建設、HTML5建站、小程序制作等業(yè)務。10年已為小店眾多企業(yè)、政府機構等服務。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設公司優(yōu)惠進行中。
上面你的代碼中你給你的子函數(shù)傳遞一個int 類型的值,編譯器肯定會報錯,但是你用顯式類型轉換將int轉換成雙指針類型就騙過了編譯器。比如這樣:
int test=0x00400000;
shell_sort((char**)test,n);
編譯通過,運行必然出錯。
這是個函數(shù)指針 前面的void為返回值類型 后面的void*為參數(shù)類型.
函數(shù)指針是可以作為某個函數(shù)的參數(shù)的.
(1) 指向函數(shù)的指針變量的一般定義形式為:
數(shù)據(jù)類型 (*指針變量名)(函數(shù)參數(shù)列表)
函數(shù)名是可以缺省的 作為參數(shù)傳遞的時候會去調(diào)和 void*(*)(void*)這個類型相匹配的函數(shù)的
作為參數(shù)調(diào)用這個函數(shù)的時候 返回類型是void* 就相當于傳了一個參數(shù)類型為void*,當然這個函數(shù)指針的參數(shù)也是void*的
數(shù)組名就是指針,例如:
#include stdio.h
void?pr(char *p)
{
printf(p);
}
void main(void)
{
char s[] = "abc";
pr(s);
}
擴展資料:
注意事項
非數(shù)組類的聲明盡量以指針的方式進行比較好。倘若一個指針指向的內(nèi)存并不是一個數(shù)組,那么采用數(shù)組名的聲明方式或許就會給人產(chǎn)生錯誤的引導。類似的,如果指向的是一個數(shù)組區(qū)域,則會給人以更加豐富的信息。例如:
int main(int argc,char* argv[])
{
/* code here */
}
與
int main(int argc,char** argv)
{
/* code here */
}
兩種方式完全等價,但是前面一種能夠更清晰地看出:這個參數(shù)是指向某個元素起始地址的指針,而后面的這種方式則不能夠直觀地看出這種含義。