C語言筆記----函數指針與指針函數

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章