一、概念
/*
对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;
}