pragma mark 指向函數(shù)的指針-基本概念
pragma mark 概念
/**
對(duì)OC的block有很大的幫助
指向函數(shù)的指針 的定義格式
// 加上一個(gè)() 說(shuō)明這個(gè)指針將來(lái)要指向 一個(gè) 函數(shù)
// 函數(shù)有以下
沒(méi)有返回值沒(méi)有參數(shù)
有返回值沒(méi)有參數(shù)
沒(méi)有返回值有參數(shù)
有返回值有參數(shù)
* : 代表一個(gè)指針
funtionP : 代表指針變量的名稱,區(qū)分
(*funtionP) : 代表將來(lái)指向一個(gè)函數(shù)
void (*futionP)() 沒(méi)有返回值沒(méi)有參數(shù)的指針
void : 代表將來(lái)指向的函數(shù) 沒(méi)有返回值
() : 代表將來(lái)指向的函數(shù) 沒(méi)有參數(shù)
*/
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;
}
// 函數(shù)也會(huì)占用一塊存儲(chǔ)空間
// 因?yàn)楹瘮?shù)也會(huì)占用一塊存儲(chǔ)空間农曲,所以函數(shù)也有自己的地址
// 函數(shù)的地址保存在函數(shù)名中
// 函數(shù)名就是函數(shù)的地址 == 數(shù)組名就是數(shù)組的地址
int main()
{
printf("text = %p\n",text);
#warning 如何定義一個(gè)指針 指向 函數(shù)
/*
指向函數(shù)的指針 的定義格式
// 加上一個(gè)() 說(shuō)明這個(gè)指針將來(lái)要指向 一個(gè) 函數(shù)
// 函數(shù)有以下
沒(méi)有返回值沒(méi)有參數(shù)
有返回值沒(méi)有參數(shù)
沒(méi)有返回值有參數(shù)
有返回值有參數(shù)
* : 代表一個(gè)指針
funtionP : 代表指針變量的名稱,區(qū)分
(*funtionP) : 代表將來(lái)指向一個(gè)函數(shù)
void (*futionP)() 沒(méi)有返回值沒(méi)有參數(shù)的指針
void : 代表將來(lái)指向的函數(shù) 沒(méi)有返回值
() : 代表將來(lái)指向的函數(shù) 沒(méi)有參數(shù)
普通指針的定義格式
數(shù)據(jù)類型 *指針變量名稱
int *p;
*/
#warning 解釋
/*
void (*funtionP) () ;
funtionP = text; // 注意: 千萬(wàn)不能寫text()
// text(); // 之前調(diào)用函數(shù) 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就是數(shù)組的地址
*/
/*
ages[0];
p[0];
*(p + n);
*/
#warning 練習(xí)
// 有返回值 沒(méi)有參數(shù)
int (*ageP) ();
ageP = getAge; // 注意這里一定不要加() 加()表示調(diào)用函數(shù) 我們只需需要把函數(shù)的地址 賦給 指針
ageP();
printf("age = %i\n",ageP());
// 沒(méi)有返回值 有參數(shù)(形參)
// void (*sumP) (int v1,int v2);
void (*sumP) (int,int); // 可以省略形參的名稱,只需要寫數(shù)據(jù)類型
sumP = sum;
sumP(20,20);
// 有返回值 有參數(shù)
int (*sumP2) (int ,int);
sumP2 = sum2;
printf("sum2 = %i\n",sumP2(10,15));
return 0;
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者