天天看點

C語言.函數指針、指針函數、數組指針、指針數組的區分和作用

//首先定義一個指針函數和函數指針
//優先級 ()    *     資料類型
int *p()       //首先p與()結合,說明是個一個函數,在與*結合,是以是一個傳回指針的函數,作用和普通函數比是傳回一個int型指針
int (*p)()    //首先與*結合,說明是一個指針,再與右邊()結合,是以是一個函數指針,作用和普通指針比是指向一個函數

//指針函數     本質為函數,作用是傳回一個指針
int *p()
{
return 指針(位址);
}

//函數指針     本質為指針,作用是指向函數
//典型的回調函數應用
int Funtion1 (int (*p)() );   //函數指針 接收Fun2作為參數
int Funtion2();

int main(int argc,char *argv[], char **enpv)    
{
	Funtion1(Funtion2);      //Funtion2的傳回值作為Fun1的參數
}

//拓展資料:
main(int argc, char *argv[ ], char **env)才是UNIX和Linux中的标準寫法。

//補充:
數組和函數本質也是指針,其數組名/函數名為位址,是以傳參時,可以直接寫其名,後面不用加[]或() a[3]等價于*a(3)
           

同理

int *p[n]         //指針數組,本質為數組,有n個指針元素組成的數組。

int (*p)[n]      //數組指針,本質為指針,指向一維數組的指針,亦稱行指針。
           

補充:

&a 的運算結果是一個指針,指針的類型是a 的類型加個*,
int *a;則&a的指針類型為*(*a)
int **b=&a=**a,類型比對