int *p1[10] 和 int (*p2)[10] 的区分以及声明返回数组的指针(C++ Primer的阅读笔记)

一.int *p1[10] 和 int (*p2)[10] 的区分

	int arr[10];					// arr是一个含有是个整数的数组
	int *p1[10];					// p1是一个含有10个指针的数组
	int (*p2)[10] = &arr;			// p2是一个指针,他指向含有十个整数的数组

其中第二行和第三行容易混淆,而且不好理解。
第二行代码可以理解成 (int*) p1[10];,p1[10]即定义了一个数组,而(int*)代表p1数组中含有的是整数指针元素 。
第三行代码则是先阅读括号内的代码,(*p2)表示调用p2时要解引用,因此p2是一个指针,int (*p2)[10];则是代表p2指向的是一个含有是个整数的数组。

二.声明返回数组的指针

和如上数组的声明一样,若想定义一个返回数组指针的函数,则数组的维度必须跟在函数名字之后。然而,函数的形参列表也跟在函数名字后面且形参列表应该先于数组的维度。因此,返回数组指针的函数形式如下所示:

Type (*function (parameter_list)) [dimension]		//通常形式
int (*func(int i)) [10];							//具体例子

同样可以按上面的方法来理解该声明的含义

  • func(int i) 表示调用func函数时需要一个int类型的实参。
  • (*func(int i))意味着我们可以对函数调用的结果执行解引用操作。
  • (*func(int i)) [10] 表示解引用func的调用将得到一个大小是10的数组。
  • int (*func(int i)) [10]; 表示数组中的元素是int类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值