当用sum(arr, arr + 5))计算数组总和时,sum是一个自定义函数,其内容是由编程人书写的。
如果这个函数是这样写:
int sum(int*a,int*b){
int*p,s
for(p=a,s=0p<bp++)
s+=*p
return s
}
就能得到正确的结果。
你说的“arr指向数组的首地址”是正确的,但“对arr+5后不是相当于arr[6]了吧”是错误的,因为arr+5是元素arr[5]的地址。但即使这样,如果自定义函数不加arr[5](像上面的例子),程序是能够得到正确的结果的。但是,如果不这样写,可能会造成这样数组下标越界。
这取决于函数sum是怎样写的。
最主要的,sum后面的arr与arr+5,只是两个参数,并不是加法的对象,这一点一定要搞清楚。
数组的下标是从0开始的,并非从1
因此假设定义数组int a[3],那么有效的数组元素为a[0] a[1] a[2]
楼组的代码里面的数组从1开始使用,输入3*3的数组会导致越界,踩内存发生错误
void fun(int arr[M][N]){
int i,j
for(i=1i<=Mi++) //应该是for(i=0i<Mi++)
for(j=1j<=Nj++)
scanf("%d",&arr[i][j])
}
其他也按照这个修改就可以了