昨天学习了函数指针,今天做个复习和记录
首先和函数指针比较类似的是数组指针,和数组类型,先回顾一下,如下是定义数组类型和数组指针类型
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");
}
需要注意的是对函数指针去多少次地址&和多少次*都是一样的,只是他和别的指针类型的特别之处
函数名就是函数的入口地址