浅析指针数组,数组指针,函数指针,函数指针数组,指向函数指针数组的指针

对于指针有几个比较难的概念,下面做一些简单的分析:
数组指针:是指针,该指针有能力指向一个数组
指针数组:是数组,是一个存放指针的数组
函数指针:是指针,该指针有能力指向一个函数
函数指针数组:是数组,是一个存放函数指针的数组
指向函数指针数组的指针:是指针,指针指向一个数组,数组的元素为函数指针。
代码说明:
#include <stdio.h>
#include <stdlib.h>
int Add(int x, int y)
{
	return x + y;
}
int main()
{
	int *arr[5];//指针数组

	int *(*pArr)[5] = &arr;
	//数组指针,
	//它是一个指针,指针有能力指向一个数组
	//数组有5个元素,每个元素是一个整形指针

	int (*pFun)(int,int) = &Add;
	//pFun是一个函数指针
	//该指针指向一个函数,
	//函数的参数为int,int类型,返回值为int类型

	int(*pFunArr[3])(int, int) = { &Add };
	//pFunArr是一个函数指针数组
	//该数组有3个元素,每个元素为一个函数指针
	//该指针指向一个函数,函数的参数为int,int类型,返回值为int类型

	int(*(*ppFunArr)[3])(int, int)=&pFunArr;
	//ppFunArr是一个指向函数指针数组的指针
	//它是一个指针,该指针有能力指向一个数组
	//数组有3个元素,每个元素为一个函数指针
	//该指针指向一个函数,函数的参数为int,int类型,返回值为int类型
	system("pause");
	return 0;
}

对于函数指针和函数指针数组的应用下一篇有讲解,附上链接:应用

两个有趣的代码:
(*(void(*)())0)();
	//调用0地址处的函数,该函数为没有参数,返回类型为void的函数
	//该代码是把0强转成函数指针,然后再解引用找到函数再调用

void(*signal(int, void(*)(int)))(int);
	//是一个函数声明,signal是一个函数,
	//参数为int类型和函数指针类型,返回值为函数指针类型

第二个代码可读性差,可以改写成以下形式:
typedef void(*pfun_t)(int);
pfun_t signal(int, pfun_t);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值