当前位置: 首页 > news >正文

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

最近看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;

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

在这里插入图片描述

http://www.lryc.cn/news/177127.html

相关文章:

  • Spring Cloud Gateway快速入门(三)——过滤器
  • vue3相比vue2的优点
  • gitee-快速设置
  • 将切分的图片筛选出有缺陷的
  • el-tooltip内容换行显示
  • linux 下用posix semaphore 解决资源竞争问题实例
  • RocketMQ —消费者负载均衡
  • Python自动化小技巧23——PDF文件拆分为单独页面(PyMuPDF)
  • CISSP学习笔记:通过原则和策略的安全治理
  • 【Java 进阶篇】数据定义语言(DDL)详解
  • MySQL详细案例 1:MySQL主从复制与读写分离
  • Kafka 常见问题
  • 如何去开展软件测试工作
  • 详解如何在python中实现简单的app自动化框架
  • 【TCP】三次握手 与 四次挥手 详解
  • 正则表达式新解
  • MissionPlanner编译过程
  • SpringBoot 员工管理---通用模板 ---苍穹外卖day2
  • 可信执行环境(Tee)入门综述
  • Java浮点运算为什么不精确
  • linux使用操作[1]
  • 权限提升Linux篇
  • 影刀自动化采集底层逻辑
  • swiper使用
  • 基于遗传算法解决的多仓库多旅行推销员问题(Matlab代码实现)
  • 微信小程序 工具使用(HBuilderX)
  • 设计模式:观察者模式(C++实现)
  • 【前端打怪升级日志之微前端框架篇】微前端qiankun框架子应用间跳转方法
  • C语言中的typedef struct用法
  • 司徒理财:9.27黄金原油日内多空走势行情操作建议