函数指针基础的学习记录
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");
}
需要注意的是对函数指针去多少次地址&和多少次*都是一样的,只是他和别的指针类型的特别之处
函数名就是函数的入口地址
首先和函数指针比较类似的是数组指针,和数组类型,先回顾一下,如下是定义数组类型和数组指针类型
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");
}
需要注意的是对函数指针去多少次地址&和多少次*都是一样的,只是他和别的指针类型的特别之处
函数名就是函数的入口地址
相关文章推荐
- Android使用vcard文件的方法简单实例
- Python将list中的string批量转化成int/float
- 在 iOS 应用中直接跳转到 AppStore 的方法
- 图片流转为字符串
- iOS开发网络篇—发送GET和POST请求(使用NSURLSession)
- 代码管理_SVN_搭建SVN_Server
- curl模拟测试 libwebsocket服务端程序
- centos6.5环境下tensoflow0.8.0的安装测试
- web项目改名后无法通过新名称访问
- 退出启动storm的命令界面
- NSURLSession使用说明及后台工作流程分析
- restfull api
- iOS9.0以上tableView reload刷新界面展示问题
- Mybatis源码学习(四)一级缓存机制
- JVM运行时的数据区
- linux学习三部曲
- tmux使用
- ABP框架中导航菜单的使用及JavaScript API获取菜单的方法
- 数据库查询优化方案
- js改变css样式的三种方法