sum()函数形式完成 标为偶数的元素和下标为奇数的元素,为什么执行是地址呢????在线等 谢谢了

来源:百度知道 编辑:UC知道 时间:2024/06/21 08:54:20
#include "stdio.h"
int main(void)
{
int a[]={3,34,3,1,24,1,2,32,13,2,16,32};

sum(a[12],12);

return 0;
}
sum(int a[],int n,double *e_sum_p,double *o_sum_p)
{
e_sum_p=&a[0];o_sum_p=&a[1];
for(n=2;n<12;n++)
{
if(n%2==0){*e_sum_p+=a[n];}
else if(n%2!=0){*o_sum_p+=a[n];}
}
printf("%d %d ",*e_sum_p,*o_sum_p );

}

这个函数实际上是把所有偶数下标的成员累加放到a[0],所有奇数成员的和放到a[1]。
这样函数起始用了2个指针指向a[0]和a[1],直接操作a[0]和a[1]。

实际上sum()函数定义很多地方不合适。
首先,如果操作数组,根本没有必要定义2个指针参数,直接用数组来操作就可以,作为参数,数组和指针是一样的。
其次,第二参数n没有意义,n在函数体内再次赋值,而且数组长度在函数内被定为12,不利于函数的重复使用性。不如把n定为数组的长度(即循环上限)传递给函数。

用下面改过的代码吧,数组长度改变函数也一样可以使用。
#include "stdio.h"
int main(void)
{
int a[]={3,34,3,1,24,1,2,32,13,2,16,32};

sum(a,12);

return 0;
}
sum(int *a, int n)
{
int i;
for(i=2;i<n;i++)
{
if(i%2==0)
{*a+=*(a+i);}
else
{*(a+1)+=*(a+i);}
}
printf("%d %d ",*a,*(a+1) );

}