解释示例代码(c编程)
下面的代码来自一本c编程教程。目的是找到10个浮点值的平均值解释示例代码(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
#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:这很公平。重点是,大多数初学者根本没有这种二元性。