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

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

《C++ primer》练习6.36-6.38:书写返回数组引用的函数声明_第1张图片

这里先总结返回数组的引用的的函数声明写法(下面的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 
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;

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

在这里插入图片描述

你可能感兴趣的:(C和C++,数组,引用,函数,数组引用,声明)