在这个程序中,我不太明白注释下面发生了什么:/ *传递数组* /。该程序的输出应为输入温度#0,#1,#2 .....#30的31次迭代,然后将这些用户输入的值转换为摄氏度。我的困惑在于函数调用转换(temps)的目的或方式以及下面的所有内容如何起作用。
有关代码“如何工作”以实现所述输出的任何说明都会很棒。另外是通过参考转换函数发生的调用,如果是这样,有人可以解释其中的动态。
谢谢。
#define COUNT 31
void convert (float heat[]);
void main()
{
float temps[COUNT];
int index;
/*load the array with values*/
for (index = 0; index < COUNT ; index++)
{
printf("Enter temperature #%d: ", index);
scanf("%f", &temps[index]);
}
/*pass the array */
convert(temps);
for (index = 0; index < COUNT ; index++)
printf("%6.2f\n", temps[index]);
}
/*******************convert function ************************/
void convert (float heat[])
{
int index;
for (index = 0; index < COUNT; index++)
{
heat[index] = (5.0/9.0)*(heat[index]-32);
}
}
答案 0 :(得分:0)
函数 convert 接收指向 temps 数组的第一个元素的指针,然后修改其元素。换句话说,永远不会复制数组。由于只传递了一个指针,因此无法确定形式参数 heat 在 convert 中的时长。因此,传递数组的长度也是一个好主意。我将如何做到这一点:
#include <stdio.h>
#include <stdlib.h>
#define LEN(arr) ((int) (sizeof (arr) / sizeof (arr)[0]))
void convert(float heat[], int heatLen)
{
int i;
for (i = 0; i < heatLen; i++) {
heat[i] = (5.0 / 9.0) * (heat[i] - 32);
}
}
int main(void)
{
float temps[31];
int i, nRead;
for (i = 0; i < LEN(temps) ; i++) {
printf("Enter temperature #%d: ", i);
nRead = scanf("%f", &temps[i]);
if (nRead != 1) {
fprintf(stderr, "Invalid input\n");
exit(EXIT_FAILURE);
}
}
convert(temps, LEN(temps));
for (i = 0; i < LEN(temps) ; i++) {
printf("%6.2f\n", temps[i]);
}
return 0;
}
答案 1 :(得分:0)
C中没有call by reference
这样的内容。 语言支持按值调用。
电话
convert(temps);
传递值。由于temps
是一个数组,它确实通过了address of the first element in the array
。对于函数,它看起来像pointer to float
- 我们说当用作函数参数时,数组会衰减为指针。
在convert
函数内,您可以使用传递的地址值(也就是使用指针)更改数组中元素的值。这可以通过简单的索引来完成,比如
temps[i] = .....;
或
*(temps + i) = ....;