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;
}