解释示例代码(c编程)

解释示例代码(c编程),c,C,下面的代码来自一本c编程教程。目的是找到10个浮点值的平均值 #include <stdio.h> void avg(double *d, int num); int main(void) { double nums[]={1.0,2.0,3.0,4.0,5.0, 6.0,7.0,8.0,9.0,10.0} avg(nums,10); return 0; } void avg(double *d, int num

下面的代码来自一本c编程教程。目的是找到10个浮点值的平均值

#include <stdio.h>

void avg(double *d, int num);

int main(void)
{
    double nums[]={1.0,2.0,3.0,4.0,5.0,
                   6.0,7.0,8.0,9.0,10.0}

    avg(nums,10);

    return 0;
}

void avg(double *d, int num)
{
    double sum;
    int temp;

    temp=num-1;

    for(sum=0;temp>=0;temp--)
        sum=sum+d[temp];
    printf("Average is %f", sum/(double)num);
}
#包括
无效平均值(双*d,整数);
内部主(空)
{
双nums[]={1.0,2.0,3.0,4.0,5.0,
6.0,7.0,8.0,9.0,10.0}
平均值(nums,10);
返回0;
}
无效平均值(双*d,整数)
{
双和;
内部温度;
温度=num-1;
对于(总和=0;温度>=0;温度--)
总和=总和+d[温度];
printf(“平均值为%f”,总和/(双倍)num);
}

在第23行中使用d[temp]时会发生什么情况。

d[temp]
表示访问
d
指向的数组的
temp
第th个元素。也就是说,
d
指向至少
temp+1
double
s的数组,您希望在第23行中检索其中的
temp
th

d[temp]
将使用
nums中的
temp
阵列


在另一个术语中,
d[temp]
将替换为
nums
数组的
temp+1
第个元素。

您迭代nums[]-数组,并在这一行将所有值添加到某个变量中。 d[temp]访问索引temp上项目的值

sum=sum+d[temp]
在这里,您正在访问双数组
d
的每个
temp
th元素

如果你有3个数字

temp=num-1; // temp =2

for(sum=0;temp>=0;temp--)
    sum=sum+d[temp];
将扩展到-

sum=0+d[2]; then temp becomes 1 // you are adding 2nd element with sum
sum=sum+d[1]; then temp becomes 0 // here you are adding with previous result // First element + sum
sum=sum+d[0]; then temp becomes -1 // condition fails // 0th element + sum
这很简单-

sum=d[2]+d[1]+d[0];

使用
sum=0
作为初始化的错误样式(当上面已经有
temp=num-1
时)。这是什么书?当人们期望
i
时,也可以使用“temp”作为迭代器,也可以向下迭代。。这只是到处都是糟糕的代码;让
avg
将值写入标准输出,而不是返回到
main
。有点违背了最初创建函数的目的。这是一件重要且经常令人困惑的事情。X的数组和指向X的指针是可互换的+1@0xC0000022L不总是可以互换的,但经常可以互换(由于指针的衰减)@DrewMcGowen:这很公平。重点是,大多数初学者根本没有这种二元性。