news 2026/4/25 7:53:18

C++函数与数组的深度结合:指针、常量与区间操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++函数与数组的深度结合:指针、常量与区间操作

C++函数与数组的深度结合:指针、常量与区间操作

数组与函数基础

在C++中,数组名实际上是一个指向数组第一个元素的指针。这是理解数组函数参数传递的关键。

intsum_arr(intarr[],intn);// 等同于 int sum_arr(int *arr, int n);

核心概念解析

1. 数组名即指针

intcookies[8]={1,2,4,8,16,32,64,128};// cookies == &cookies[0] // true// cookies的类型是 int*

2. 重要恒等式

arr[i]==*(arr+i)// 访问元素&arr[i]==arr+i// 获取地址

3. 数组传参的本质

当传递数组给函数时,实际传递的是:

  • 数组首地址
  • 数组元素类型信息
  • 需要单独传递元素数量
intsum=sum_arr(cookies,8);// 传递地址和大小

数组处理函数的编写模式

1. 修改数组的函数

voidmodify_array(doublearr[],intn){for(inti=0;i<n;i++)arr[i]*=2;// 修改原始数组}

2. 不修改数组的函数(使用const保护)

voidshow_array(constdoublearr[],intn){for(inti=0;i<n;i++)cout<<arr[i]<<" ";// 只读访问}

完整的数组操作示例

// 1. 填充数组intfill_array(doublearr[],intlimit){inti;for(i=0;i<limit;i++){cout<<"Enter value #"<<(i+1)<<": ";cin>>arr[i];if(arr[i]<0)break;// 负数结束输入}returni;// 返回实际填充的数量}// 2. 显示数组(const保护)voidshow_array(constdoublearr[],intn){for(inti=0;i<n;i++)cout<<"Element "<<i<<": "<<arr[i]<<endl;}// 3. 修改数组voidrevalue(doublefactor,doublearr[],intn){for(inti=0;i<n;i++)arr[i]*=factor;}

数组区间操作

C++提供更灵活的数组处理方式——使用指针区间:

intsum_arr(constint*begin,constint*end){constint*pt;inttotal=0;for(pt=begin;pt!=end;pt++)total+=*pt;returntotal;}// 使用示例intarr[8]={1,2,4,8,16,32,64,128};inttotal=sum_arr(arr,arr+8);// 整个数组intfirst3=sum_arr(arr,arr+3);// 前3个元素intlast4=sum_arr(arr+4,arr+8);// 后4个元素

指针与const的四种组合

1. 指向常量的指针

intage=39;constint*pt=&age;// 不能通过pt修改age// *pt = 40; // 错误!

2. 常量指针

intage=39;int*constpt=&age;// pt不能指向其他地址pt=&other;// 错误!*pt=40;// 正确,可以修改值

3. 指向常量的常量指针

intage=39;constint*constpt=&age;// 既不能修改指针,也不能修改值

4. 多层间接关系中的const

constint**pp2;// 指向const指针的指针int*p1;constintn=13;// pp2 = &p1; // 危险!需要小心处理

最佳实践总结

  1. 数组传参原则

    • 总是传递数组大小作为单独参数
    • 使用const保护不需要修改的数组
  2. 函数设计模式

    // 修改数组voidprocess_array(type arr[],intsize);// 只读访问voidshow_array(consttype arr[],intsize);
  3. 安全性考虑

    • 优先使用const保护数据
    • 考虑使用数组区间操作增加灵活性
    • 避免混淆指针的const位置
  4. 自下而上的设计

    • 先考虑数据结构和基本操作
    • 再组合成完整程序
    • 这是面向对象编程的基础

实际应用示例

房地产价值管理程序展示了如何将数组操作封装成函数,实现数据的填充、显示和修改,体现了良好的模块化设计思想。

通过掌握这些概念,你可以编写出更安全、更灵活的数组处理代码,为学习更高级的C++特性(如STL容器)打下坚实基础。


要点记忆:数组名是指针,传递数组就是传递地址,使用const保护数据,区间操作提供灵活性,const的位置决定保护什么。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/14 0:27:45

PoE Overlay终极指南:从新手到高手的快速上手技巧

还在为《流放之路》中复杂的物品鉴定和繁琐的交易流程而头疼吗&#xff1f;每次打到稀有装备都要反复查询市场价&#xff0c;处理交易请求时手忙脚乱&#xff1f;PoE Overlay正是为你量身打造的解决方案&#xff0c;这款基于Overwolf平台的游戏辅助工具将彻底改变你的游戏体验。…

作者头像 李华
网站建设 2026/4/23 12:32:29

黑极光君与面包君的对话15

面包君&#xff1a;真正的超越&#xff0c;不是在竞争和比较中胜出&#xff0c;而是高出竞争和比较的维度&#xff0c;让这些竞争和比较直接失去意义&#xff0c;就像是旧系统是一栋10层普通平民楼房&#xff0c;我盖出一栋100层更加宽敞且结构稳固的摩天大楼&#xff0c;还欢迎…

作者头像 李华
网站建设 2026/4/18 14:16:52

AMD显卡AI图像生成:突破兼容性壁垒的终极性能优化方案

AMD显卡AI图像生成&#xff1a;突破兼容性壁垒的终极性能优化方案 【免费下载链接】ComfyUI-Zluda The most powerful and modular stable diffusion GUI, api and backend with a graph/nodes interface. Now ZLUDA enhanced for better AMD GPU performance. 项目地址: htt…

作者头像 李华
网站建设 2026/4/21 18:29:21

Jupyter AI终极指南:从零开始快速上手AI编程助手

Jupyter AI终极指南&#xff1a;从零开始快速上手AI编程助手 【免费下载链接】jupyter-ai A generative AI extension for JupyterLab 项目地址: https://gitcode.com/gh_mirrors/ju/jupyter-ai Jupyter AI是一个专为JupyterLab设计的生成式AI扩展&#xff0c;它巧妙地将…

作者头像 李华
网站建设 2026/4/23 12:03:20

java springboot基于微信小程序的企业问卷调查投票系统(源码+文档+运行视频+讲解视频)

文章目录 系列文章目录目的前言一、详细视频演示二、项目部分实现截图三、技术栈 后端框架springboot前端框架vue持久层框架MyBaitsPlus微信小程序介绍系统测试 四、代码参考 源码获取 目的 摘要&#xff1a;传统企业问卷调查与投票方式存在效率低、数据收集难、参与度不高等…

作者头像 李华
网站建设 2026/4/17 17:25:38

java springboot基于微信小程序的农产品扶贫助农系统(源码+文档+运行视频+讲解视频)

文章目录 系列文章目录目的前言一、详细视频演示二、项目部分实现截图三、技术栈 后端框架springboot前端框架vue持久层框架MyBaitsPlus微信小程序介绍系统测试 四、代码参考 源码获取 目的 摘要&#xff1a;为解决农产品销售渠道单一、信息不对称导致的滞销难题&#xff0c;…

作者头像 李华