C語言筆記【1】
1、函數指針
【定義】函數指針,其本質是一個指針變量,該指針指向這個函數。總結來說,函數指針就是指向函數的指針。
*聲明格式:類型說明符 (函數名) (參數)
如下:
int (*fun)(int x,int y);
函數指針是需要把一個函數的地址賦值給它,有兩種寫法:
fun = &Function;
fun = Function;
取地址運算符&不是必需的,因爲一個函數標識符就表示了它的地址,如果是函數調用,還必須包含一個圓括號括起來的參數表。
調用函數指針的方式也有兩種:
x = (*fun)();
x = fun();
兩種方式均可,其中第二種看上去和普通的函數調用沒啥區別,如果可以的話,建議使用第一種,因爲可以清楚的指明這是通過指針的方式來調用函數。當然,也要看個人習慣,如果理解其定義,隨便怎麼用都行啦。
例子如下:
#include <stdio.h>
int add(int x,int y){
int sum=x+y;
printf ("%d\n",sum);
return sum;
}
int main()
{
int (*f) (int x,int y);
f=add;
(*f) (2,3);
//f(2,3);
//add(2,3);
return 0;
}
運行截圖·:
2、指針函數
指針函數,簡單的來說,就是一個返回指針的函數,其本質是一個函數,而該函數的返回值是一個指針。
*聲明格式爲:類型標識符 函數名(參數表)
這似乎並不難理解,再進一步描述一下。
看看下面這個函數聲明:
int fun(int x,int y);
這種函數應該都很熟悉,其實就是一個函數,然後返回值是一個 int 類型,是一個數值。
接着看下面這個函數聲明:
int *fun(int x,int y);
這和上面那個函數唯一的區別就是在函數名前面多了一個*號,而這個函數就是一個指針函數。其返回值是一個 int 類型的指針,是一個地址。
這樣描述應該很容易理解了,所謂的指針函數也沒什麼特別的,和普通函數對比不過就是其返回了一個指針(即地址值)而已。
指針函數的寫法
int *fun(int x,int y);
int * fun(int x,int y);
int* fun(int x,int y);
這個寫法看個人習慣,其實如果*靠近返回值類型的話可能更容易理解其定義。
例子如下:
#include <stdio.h>
char * Data(char s[])
{
return s;
}
int main()
{
char s[]="abcdefg";
printf("%s\n",Data(s));
return 0;
}
運行截圖:
參考:
https://blog.csdn.net/luoyayun361/article/details/80428882