pragma mark 指向函數的指針-基本概念
pragma mark 概念
/**
對OC的block有很大的幫助
指向函數的指針 的定義格式
// 加上一個() 說明這個指針將來要指向 一個 函數
// 函數有以下
沒有返回值沒有參數
有返回值沒有參數
沒有返回值有參數
有返回值有參數
* : 代表一個指針
funtionP : 代表指針變量的名稱,區分
(*funtionP) : 代表將來指向一個函數
void (*futionP)() 沒有返回值沒有參數的指針
void : 代表將來指向的函數 沒有返回值
() : 代表將來指向的函數 沒有參數
*/
pragma mark 代碼
#include <stdio.h>
void text() // 0x100000f20
{
printf("我這行了\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;
return res;
}
// 函數也會占用一塊存儲空間
// 因為函數也會占用一塊存儲空間,所以函數也有自己的地址
// 函數的地址保存在函數名中
// 函數名就是函數的地址 == 數組名就是數組的地址
int main()
{
printf("text = %p\n",text);
#warning 如何定義一個指針 指向 函數
/*
指向函數的指針 的定義格式
// 加上一個() 說明這個指針將來要指向 一個 函數
// 函數有以下
沒有返回值沒有參數
有返回值沒有參數
沒有返回值有參數
有返回值有參數
* : 代表一個指針
funtionP : 代表指針變量的名稱,區分
(*funtionP) : 代表將來指向一個函數
void (*futionP)() 沒有返回值沒有參數的指針
void : 代表將來指向的函數 沒有返回值
() : 代表將來指向的函數 沒有參數
普通指針的定義格式
數據類型 *指針變量名稱
int *p;
*/
#warning 解釋
/*
void (*funtionP) () ;
funtionP = text; // 注意: 千萬不能寫text()
// text(); // 之前調用函數 0x100000ef0 ();
(*funtionP)(); // 0x100000ef0();
// text == funtionP
funtionP();
// int num = 10;
// int *p = #
// printf("%i\n",*p);
int ages[] = {1,3,5};
int *p;
p = ages; // ages就是數組的地址
*/
/*
ages[0];
p[0];
*(p + n);
*/
#warning 練習
// 有返回值 沒有參數
int (*ageP) ();
ageP = getAge; // 注意這里一定不要加() 加()表示調用函數 我們只需需要把函數的地址 賦給 指針
ageP();
printf("age = %i\n",ageP());
// 沒有返回值 有參數(形參)
// void (*sumP) (int v1,int v2);
void (*sumP) (int,int); // 可以省略形參的名稱,只需要寫數據類型
sumP = sum;
sumP(20,20);
// 有返回值 有參數
int (*sumP2) (int ,int);
sumP2 = sum2;
printf("sum2 = %i\n",sumP2(10,15));
return 0;
}
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。