c语言对数组执行加法?

int arr[5] = {20, 10, 5, 39, 88};
sum(arr, arr + 5));//计算数组总和

arr指向数组的首地址,对arr+5后不是相当于arr[6]了吧,这样数组下标不是越界了吗?

定义int arr[5] = {20, 10, 5, 39, 88};时,系统产生一个有5个元素的一维数组,5个元素分别是arr[0]到arr[4],对应的各个元素的地址分别是arr到arr+4。
当用sum(arr, arr + 5));计算数组总和时,sum是一个自定义函数,其内容是由编程人书写的。
如果这个函数是这样写:
int sum(int*a,int*b){
int*p,s;
for(p=a,s=0;p<b;p++)
s+=*p;
return s;
}
就能得到正确的结果。
你说的“arr指向数组的首地址”是正确的,但“对arr+5后不是相当于arr[6]了吧”是错误的,因为arr+5是元素arr[5]的地址。但即使这样,如果自定义函数不加arr[5](像上面的例子),程序是能够得到正确的结果的。但是,如果不这样写,可能会造成这样数组下标越界。
这取决于函数sum是怎样写的。
最主要的,sum后面的arr与arr+5,只是两个参数,并不是加法的对象,这一点一定要搞清楚。
温馨提示:内容为网友见解,仅供参考
第1个回答  2022-01-09
你的理解是对的吧,是越界了——20是arr[0],88是arr[4]。
第2个回答  2022-01-09
arr +5相当于arr[5],为什么是6?按照你说法arr+0岂不是arr[1],显然不对嘛

如何用C语言实现20以内的加法运算呢?
1、首先打开C语言软件,在主函数main中,声明定义一个长度为20个元素的数组,并且给第0个第1个元素赋值为1。2、然后利用for循环来完成对前20项的和,如下图所示。3、并将结果输出,执行程序,如下图所示。4、执行程序,结果如下图所示,这样就完成了。

c语言对数组执行加法?
int sum(int*a,int*b){ int*p,s;for(p=a,s=0;p

在C语言中,数组名可以做加法和减法吗?
C语言中,数组名是一个不可变的指针常量,不能对它进行加、减和赋值运算。在C语言中规定,数组名是代表该数组的首地址且符合标识符书写规定的变量标识符。不能对它进行加、减和赋值运算。整个数组是以首地址开头的一块连续的内存单元。如有字符数组char c[10],设数组c的首地址为2000,也就是说c[...

c语言如何把数组中的数据加起来
可以通过循环遍历数组中的每个元素,并进行累加。累加的结果可以保存在变量中,需要注意,要保证变量足够保存累加结果,不会出现溢出。参数为整型数组a,长度为l,对其元素实现累加并返回结果的函数可以写作 int sum(int *a, int l){ int r = 0; \/\/ 存储累加结果。 int i; for(i = 0;...

c语言 利用数组实现加法
for(i=0;(k[i]!='\\0'||b[i]!='\\0');i++){ if(sign==1){ j[i]=k[i]+b[i]-95;sign=0;} else j[i]=k[i]+b[i]-96;上面的代码片段。for循环的第二个表达式成立是或关系。如果其中一个加数位数不够,后面的“-95”和“-96”将多减去一个48,所以由char型转到int型的...

C语言数组里的元素怎么加减乘除
加法:voidAdd(char s1[],char s2[])\/\/参数为两个字符串数组{ int num1[M],num2[M]; int i,j; len1 = strlen (s1); len2 = strlen (s2); for (i = len1-1,j = 0; i >= 0; i--)\/\/num1[0]保存的是低位 num1[j++]= s1[i] - '0'; for ...

如何用c语言实现一维数组和二维数组的相加
int main() { int d[5][5];int x=0, y=0;for (x = 0; x < 5; x++)for (y = 0; y < 5; y++)scanf("%d", &d[x][y]);for (x = 0; x < 5; x++)printf("%d\\n", d[x][x]);for (x=0;x < 5; x++)printf("%d\\n", d[4-x][x]);return 0;} ...

c语言一维数组求加法的示例
include <stdio.h>int main() { int i,n,sum = 0;int a[] = {31,62,34,49,75,69,87,80,91,19};n = sizeof(a)\/sizeof(a[0]);for(i = 0;i < n;i++) sum += a[i];printf("数组元素的和为:%d\\n\\n",sum);return 0;} ...

C语言输入一个数组后将数组里的数相加,为什么输出结果不对?_百度知 ...
应该在定义的时候给他赋初始值为0。第二,循环体没有加花括号,导致只有读入语句是执行循环的,而下面的累加到sum的语句则要到循环结束以后才执行一次,起不到累加的作用。第三,格式化输入语句scanf在给float类型输入时是不能指定小数位数的(最多只能限定总位数),应该使用%f格式符。

c语言数组 int a[100],给他们赋值,怎么做到a[1]+a[2]+a[100]
c语言数组int a[100];定义后,实际上可以使用的数组元素是a[0],a[1],...,a[99],没有a[100]可用 求a[0]+a[1]+a[99]可以:int s=a[0]+a[1]+a[99];求a[0]+a[1]+...+a[99]可以:用累加的方法计算,变量s初始值为0,每次向这个变量上加a数组中的一个数,这个数的下标...

相似回答