一、概念
/*
對OC的block有一定好處
函數也會占用一塊存儲空間
函數也會占用一塊存儲空間,所以函數也有自己的地址
函數的地址保存在函數名中
函數名就是函數的地址 == 數組名就是數組的地址
指向函數的指針的定義格式
void (*funtionP) ();
* : 代表一個指針
funtionP : 代表指針變量的名稱, 區分
(*funtionP) : 代表將來指向一個函數
void : 代表將來 指向的函數 沒有返回值
() : 代表將來 指向的函數 沒有參數
---
沒有返回值 沒有參數
沒有返回值 有參數
有返回值 沒有參數
有返回值 有參數
*/
二、代碼
#include <stdio.h>
void text()
{
printf("lyh\n");
}
int getAge()
{
return 30;
}
void sum(int v1,int v2)
{
int res = v1 + v2;
printf("res = %i\n",res);
}
int sum2(int v1,int v2)
{
int res = v1 + v2;
printf("res = %i\n",res);
return res;
}
int main()
{
printf("text = %p\n",text);
/*
沒有返回值 沒有參數
void (*funtionP) ();
沒有返回值 有參數
有返回值 沒有參數
有返回值 有參數
指向函數的指針的定義格式
void (*funtionP) ();
* : 代表一個指針
funtionP : 代表指針變量的名稱, 區分
(*funtionP) : 代表將來指向一個函數
void : 代表將來 指向的函數 沒有返回值
() : 代表將來 指向的函數 沒有參數
普通指針的定義格式
數據類型 *指針變量名稱
int *p;
*/
/*
void (*funcationP)();
funcationP = text; // 注意: 千萬不要寫成text()
text(); // 0x100000f30();
(*funcationP)(); // 0x100000f30();
// text == funtionP
funcationP();
*/
// int num = 10;
// int *p = #
// printf("%i\n",*p);
/*
int ages[] = {1,3,5};
int *p;
p = ages;// age就是數組的地址
// ages[0];
// p[0];
// *(p + n)
*/
int (*ageP)();
ageP = getAge;
printf("age = %i\n",ageP());
void (*sumP)(int,int);
sumP = sum;
sumP(10,20);
int (*sumP2)(int,int);
sumP2 = sum2;
printf("sum = %i",sumP2(2,5));
return 0;
}
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。