返回数组指针

函数返回数组指针的方法,写了三种:

1.声明一个返回数组指针的函数
按我自己的理解应该是int*[x] func(int i); 其实这是错误的想法,编程不是我们自己想象的那样。

	//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类型。

这和下面的定义比较像

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

2.使用尾值返回类型

为了表示函数真正的返回类型跟在形参列表之后,我们在本应该出现返回类型的地方放置一个auto。

//func接受一个int类型的实参,返回一个指针,该指针指向含有10个整数的数组
auto func(int i)->int(*) [10];
//int(*) [10] 和数组的指针读法一样,先读小括号里面:是个指针类型,
//再读右边:指针指向一个含有10个元素的数组,
//最后读左边:元素的类型是int型。

因为我们把函数的返回类型放在了形参列表之后,所以可以清楚地看到func函数返回的是一个指针,并且该指针指向了含有10个整数的数组。

3.使用decltype
还有一种情况,如果我们知道函数返回的指针将指向哪个数组,就可以使用decltype关键字声明返回类型。

int odd[]={1,3,5,7,9};
int even[]={0,2,4,6,8};
//返回一个指针,该指针指向含有5个整数的数组
decltype(odd) *arrPtr(int i){
	return (i%2)?&odd:&even;
}

arrPtr使用关键字decltype表示它的返回类型是个指针,并且该指针所指的对象与odd的类型一致。 因为odd是数组,所以arrPtr返回一个指向含有5个整数的数组的指针。
有一个地方需要注意:decltype并不负责把数组类型转换成对应的指针,所以decltype的结果是个数组,要想表示arrPtr返回指针还必须在函数声明时加一个*符号。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值