数组指针类型与函数指针类型

由于数组类型与函数类型的定义方法很类似,因此放到一起。

数组指针
数组类型的定义
typedef int (myArrayType)[10];
int main()
{
	int a[10];
	myArrayType b;//等价于int b[10];
	a[0] = 1;
	b[0] = 1;
	cout << a[0] << " " << b[0] << endl;
	return 0;
}
输出结果:在这里插入图片描述
数组指针类型的定义
typedef int(*myPArrayType)[10];
int main()
{
	int a[10];
	a[0] = 1;
	myPArrayType p;
	p = &a;
	cout << (*p)[0] << endl;
	return 0;
}
输出结果:

在这里插入图片描述

myPArrayType是数组的地址,而a是数组首元素的地址,因此myPArrayType相当于一个二级指针。

说到数组指针就不得不提一下指针数组,初学指针与数组时很容易混淆这两个概念,但其实也很好理解。数组指针可以念成数组的指针,也就是说本质上是一个指针,只是该指针指向的是一个数组罢了,也就是上面这个例子。而指针数组又可以念成指针的数组,顾名思义本质上是一个数组,只不过数组的元素是指针。

另外值得注意的是a+1&a+1完全不同,指针+1的步长取决于指针所指的数据类型,a指的是int类型因此向后移动四个字节,而&a指向的是一个数组因此向后移动四十个字节。

函数指针
通过函数类型定义函数指针
typedef int (myFuncType)(int);
int main()
{
	int a = 5;
	myFuncType *Func;
	Func = &add;
	cout << Func(a) << endl;
	return 0;
}
输出结果:

在这里插入图片描述

直接定义函数指针类型
typedef int (*myPFuncType)(int);
int main()
{
	int a = 5;
	myPFuncType Func;
	//Func = &add; //加不加取地址号都可以 为什么呢??????
	Func = add;
	cout << Func(a) << endl;
	return 0;
}
输出结果:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值