TRAE 网页版生成的文件找不到?用 TaoToken 统一 Key 排查配置与落盘路径
2026/9/27 19:10:49
在C++中,数组名实际上是一个指向数组第一个元素的指针。这是理解数组函数参数传递的关键。
intsum_arr(intarr[],intn);// 等同于 int sum_arr(int *arr, int n);intcookies[8]={1,2,4,8,16,32,64,128};// cookies == &cookies[0] // true// cookies的类型是 int*arr[i]==*(arr+i)// 访问元素&arr[i]==arr+i// 获取地址当传递数组给函数时,实际传递的是:
intsum=sum_arr(cookies,8);// 传递地址和大小voidmodify_array(doublearr[],intn){for(inti=0;i<n;i++)arr[i]*=2;// 修改原始数组}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个元素intage=39;constint*pt=&age;// 不能通过pt修改age// *pt = 40; // 错误!intage=39;int*constpt=&age;// pt不能指向其他地址pt=&other;// 错误!*pt=40;// 正确,可以修改值intage=39;constint*constpt=&age;// 既不能修改指针,也不能修改值constint**pp2;// 指向const指针的指针int*p1;constintn=13;// pp2 = &p1; // 危险!需要小心处理数组传参原则
函数设计模式
// 修改数组voidprocess_array(type arr[],intsize);// 只读访问voidshow_array(consttype arr[],intsize);安全性考虑
自下而上的设计
房地产价值管理程序展示了如何将数组操作封装成函数,实现数据的填充、显示和修改,体现了良好的模块化设计思想。
通过掌握这些概念,你可以编写出更安全、更灵活的数组处理代码,为学习更高级的C++特性(如STL容器)打下坚实基础。
要点记忆:数组名是指针,传递数组就是传递地址,使用const保护数据,区间操作提供灵活性,const的位置决定保护什么。