首页 > 编程语言 >c++数组作为函数参数

c++数组作为函数参数

时间:2023-08-04 10:38:11浏览次数:42  
标签:arr pt int sum c++ 函数参数 ar 数组

int sum_arr(int arr[],int n) {

	int total = 0;
	for(int i=0;i<n;i++){
  	total = total + arr[i];  
	}
	return total;
}

方括号指出arr是一个数组,而方括号为空则表明,可以将任何长度的数组传递给该函数,n代表数组的长度。实际数组名就是指针,解释为其第一个元素的地址。

int arr[3] = {1,2,3};
int sum = sum_arr(arr,3);

arr是其第一个元素的地址,因此函数传递的是地址。由于数组的元素的类型为int,因此arr的类型必须是int指针,即int *。

int sum_arr(int *arr,int n);

其中用int *arr替换了int arr[] 。这证明这两个函数头都是正确的,因为在C++中,当且仅当用于函数头或函数原型中,int *arr和int arr[]的含义才是相同的。arr不仅指向int,还指向int数组的第一个int。在其他的上下文中,int *arr和int arr[]的含义并不相同。例如,不能在函数体中使用int arr[]来声明指针。

下面2个表达式是恒等的

arr[i] == *(ar+i);
&arr[i] == ar + i;

对于遍历数组而言,使用指针加法和数组下标是等效的。

但传递数组时,函数将使用原来的数组.参数传递了一个值,这个值被赋给一个新变量,但这个值是一个地址,而不是数组的内容。使用原始数据增加了破坏数据的风险,const限定符提供了解决这种问题的办法。

void show_array(const double ar[],int n);

指针ar指向的是常量数据。这意味着不能使用ar修改该数据,也就是说,可以使用像ar[0]这样的值,但不能修改。这并不是意味着原始数组必须是常量,而只是意味着不能在show_array( )函数中使用ar来修改这些数据。

使用数组区间的函数

int sum_arr(int *begin,int *end) {

	int total = 0;
	int *pt;
	for(pt = begin;pt!=end;pt++){
  	total = total + *pt;
	}
	return total;
}

它将pt设置为指向要处理的第一个元素(begin指向的元素)的指针,并将*pt(元素的值)加入到total中。然后,循环通过递增操作来更新pt,使之指向下一个元素。只要pt不等于end,这一过程就将继续下去。当pt等于end时,它将指向区间中最后一个元素后面的一个位置,此时循环将结束。

调用

int arr[3] = {1,2,3};
int sum = sum_arr(arr,arr+3);

指针arr+3指向最后一个元素后面的一个位置(数组有3个元素,因此arr[3 − 1]是最后一个元素,其地址为

arr + 3 – 1。因此,区间[arr,arr+3]指定的是整个数组。

标签:arr,pt,int,sum,c++,函数参数,ar,数组
From: https://blog.51cto.com/u_3764469/6957604

相关文章

  • C++11
    1.VariadicTemplate可以传入任意数量的参数,并且参数的类型不定。voidprintX(){}template<typenameT,typename...Types>voidprintX(constT&firstArg,constTypes&...args){cout<<firstArg<<endl;printX(args...);}其中,...是pack包,用于模板参数中(typenam......
  • C++面试八股文:如何实现一个strncpy函数?
    C++面试八股文:如何实现一个strncpy函数?某日二师兄参加XXX科技公司的C++工程师开发岗位第31面:面试官:strcpy函数使用过吧?二师兄:用过。面试官:这个函数有什么作用?二师兄:主要用做字符串复制,将于字符从一个位置复制到另一个位置。面试官:strncpy函数也使用过吧,和strcpy有......
  • 88. 合并两个有序数组
    88.合并两个有序数组给你两个按非递减顺序排列的整数数组nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你合并nums2到nums1中,使合并后的数组同样按非递减顺序排列。注意:最终,合并后数组不应由函数返回,而是存储在数组nums1中。为了......
  • C++入门到放弃(08)——类成员:const 和 static用法
    ​1.常量成员const类的常量成员,具备以下特性:1.1.const成员必须被初始化1.2.const成员只能在初始化列表中赋值1.3.const成员不能在构造函数原型中赋值1.4.const成员初始化之后无法更改classConstMember{public:ConstMember(intnum=0):m_num(num)......
  • 两个有序数组的中位数(第k大的数)——使用二分答案的思路写起来更直观
    问题:两个已经排好序的数组,找出两个数组合并后的中位数(如果两个数组的元素数目是偶数,返回上中位数)。 感觉这种题目挺难的,尤其是将算法完全写对。因为当初自己微软面试的时候遇到了,但是没有想出来思路。看网上写了一堆解法,但是将思路说得非常清楚的少之又少。有两种思路,一个是算法导......
  • 设计模式 C++
    参考博客:https://blog.csdn.net/weixin_45712636/article/details/124328504参考视频:https://www.bilibili.com/video/BV1Np4y1z7BU?p=1&vd_source=fce372ba0aa0bf9ed76094e3192b7015参考文档:https://bright-boy.gitee.io/technical-notes/#/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%......
  • 26. 删除有序数组中的重复项
    26.删除有序数组中的重复项![image-20230803210215410](D:\BaiduSyncdisk\C++\笔记图片\26.删除有序数组中的重复项1.png)题目:给你一个升序排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。然后返回......
  • 剑指 Offer 04. 二维数组中的查找(中等)
    题目:classSolution{public:boolfindNumberIn2DArray(vector<vector<int>>&matrix,inttarget){inti=matrix.size()-1,j=0;//以矩阵最左下角作为标记符号while(i>=0&&j<matrix[0].size()){i......
  • C++职工管理系统项目实战
    职工管理系统1.管理系统需求职工管理系统可以用来管理公司内所有员工的信息,利用C++来实现一个基于多态的职工管理系统公司中职工分为三类:普通员工、经理、老板,显示信息时,需要显示职工编号、职工姓名、职工岗位、以及职责普通员工职责:完成经理交给的任务经理职责:完成老板......
  • shell 读取文件内容到数组
     在shell脚本中,可以使用下面的语法来读取文件内容并将其存储到数组中: bash复制代码array=()whilereadline;doarray+=("$line")done<file.txtLOG_INFO(){localcontent=${1}echo-e"\033[32m[INFO]${content}\033[0m"}IFS=''catbanner.......