您的位置:首页 > 其它

函数指针基础的学习记录

2016-06-28 10:11 211 查看
昨天学习了函数指针,今天做个复习和记录

首先和函数指针比较类似的是数组指针,和数组类型,先回顾一下,如下是定义数组类型和数组指针类型

typedef int (AyyayVec3)[3];    // 定义数组类型

AyyayVec3 array这样写其实等价于int array[3];

typedef int (*pArrayVec3)[3];  //定义数组指针类型

pArrayVec3 pArray; 这样写等价于int (*array)[3];  都是声明一个指向数组的指针变量

注:这里区别一下int* array[3]的写法,这样是一个指针的数组,也就是说这个数组中的三个元素都是指针,他和上面的写法有本质的区别,上面是一个int型数组的指针 ,指针数组可以这样用

typedef int* pInt;  

pInt a[4];  

继续函数指针的,他和数组类似,这样写

#include "stdlib.h"
#include "stdio.h"
#include "string.h"

// 定义一个函数类型
typedef int (func)();

// 定义一个函数指针类型
typedef int (*pFunc)();

// 可以参考数组的写法来定义一个函数指针数组
typedef int (*funcAyyay[3])();

int aaa()
{
printf("hi");
return 1;
}

int bbb()
{
printf("hello");
return 1;
}

int ccc()
{
printf("bye");
return 1;
}

void main()
{

int i = 0;
// 三种写法对应调用如下
// 第一种
{
func* fun[3] = { &aaa, &bbb, &ccc};

for (; i < 3; i++)
{
fun[i]();
}
}

// 第二种
{
pFunc func[3] = { &aaa, &bbb, &ccc};
for (i = 0; i < 3; i++)
{
func[i]();
}
}

// 第三种
{
funcAyyay func = { &aaa, &bbb, &ccc};

for (i = 0; i < 3; i++)
{
func[i]();
}
}

system("pause");
}

需要注意的是对函数指针去多少次地址&和多少次*都是一样的,只是他和别的指针类型的特别之处
函数名就是函数的入口地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: