当前位置:首页 > 编程笔记 > 正文
已解决

《C++ primer》练习6.36-6.38:书写返回数组引用的函数声明

来自网友在路上 150850提问 提问时间:2023-09-27 01:18:31阅读次数: 50

最佳答案 问答题库508位专家为你答疑解惑

最近看C++ primer,看到《C++ primer》6.3.3练习,要求书写返回数组引用的函数声明,觉得有必要实践记录一下。

在这里插入图片描述

这里先总结返回数组的引用的的函数声明写法(下面的Type是数组元素的类型,可以是int、float等,如果要返回指向数组的指针亦同,将下面的&改成*即可)

  • 写法1

函数声明为:

decltype(odd) &arrPtr(int i); //odd是个数组,需要在前面定义如int odd[]={1,2,3};
  • 写法2

函数声明为:

Type (&arrPtr(int i))[5]; //返回5个元素数组的引用
  • 写法3

函数声明为:

auto arrPtr(int i) -> Type (&)[5];//返回5个元素数组的引用
  • 写法4

在开头使用类型别名

using arr = Type[5];//using的类型别名

typedef Type arr[5];//typedef的类型别名

函数声明为:

arr &arrPtr(int i) //返回5个元素数组的引用

写一段代码看看

#include <iostream>
using namespace std;int odd[] = {1, 3, 5, 7, 9};
int even[] = {2, 4, 6, 8, 10};
decltype(odd) &arrPtr(int i);
int main(int argc, char *argv[])
{int *q = arrPtr(2);for (int *p = q; p != q + 5; p++)cout << *p << " ";
}
decltype(odd) &arrPtr(int i)
{return (i % 2) ? odd : even;
}

输出
在这里插入图片描述
如果把代码中的int *q = arrPtr(2);改成

int *q = arrPtr(1);

在这里插入图片描述
所以返回的引用是什么呢?我们在main函数添加下面的语句:

cout << odd << endl;
cout << arrPtr(1) << endl;

打印的地址其实是一样的,这说明:返回的是数组的头指针。

在这里插入图片描述

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"《C++ primer》练习6.36-6.38:书写返回数组引用的函数声明":http://eshow365.cn/6-14292-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!