函數返回值可以是 int char
float等,當然也可以是地址值,那么函數返回值是地址值得函數就定義為指針函數。即此函數的類型為指針類型,就是說改函數的返回值是指針類型。既然函數是指針類型那么其返回值必須用相同類型的指針變量來接受了。
如:
int *Add();
int *p;
===> p = Add();(切記 函數返回的是地址值)
2、函數指針:
指針變量可以指向變量地址,數組,字符串,自然也可以指向函數了。已知每個函數在編譯的時候,系統會分配給函數一個入口地址,函數名表示這個入口地址,定義指向函數的指針變量稱之為函數的指針變量。
如:
float fun(int,int);
float (*p)();
p=fun;
用函數指針變量調用函數。形式為:(*函數指針變量名)(實參表)舉例如下:
int i=5;
char ch ='a';
float fun(int char),(*p)();
p=fun;
(*p)(i,ch);
上面五行程序等價于:
int i=5;
char ch ='a';
float fun(int char);
fun(i,ch);
3、運算符的優先級("*"VS"[]")
通常在c語言的定義中,運算符優先級別的高低將會決定不同的含義。例如int
*p[4]和int(*p)[4]的區別。
對于int
*p[4],顯然[]的優先級高于*,且[]的運算方向是自左向右的即與符號左邊的變量“組合”,相反*的運算方向是自右向左的即與運算符右邊的變量“組合”。那么可以知道int
*p[4]首先是一個大小為4的數組即p[4].然后int *作為補充說明,說明該數組的每一個元素是指向整型類型的指針。
而int(*p)[4]中,()和[]運算級別相同,但考慮自左向右可以知道int(*p)[4]首先是一個指針,然后該指針p指向一個長度為4的整型數組。