gpt4 book ai didi

c - 测试 unsigned int 值时的一件奇怪的事情

转载 作者:行者123 更新时间:2023-12-04 20:16:22 25 4
gpt4 key购买 nike

今天,我写了一些代码来测试 unsigned int。

#include <stdio.h>

int sum_element(float ele[], unsigned int len);

int main(void){
float ele[] = {1.1,2.2,3.3};
float sum = sum_element(ele,3);
printf("sum is %f\n",sum);
return 0;
}

int sum_element(float ele[], unsigned int len){
int sum=0.0; //mistake,should be : float sum = 0.0
int i=0;
for(i=0;i<= len-1;i++){
printf("sum=%f, i=%d\n",sum,i);
sum += ele[i];
}
return sum;
}

在这个例子中,我有一个错误,变量sum的类型,应该是float,但是我写成int,编译命令:

 gcc test.c -o test

然后我运行这段代码

 ./test

函数 sum_element 的输出是:

sum=0.000000, i=1
sum=0.000000, i=1
sum=0.000000, i=1

然后发现错误,把sum的类型改成float,然后重新编译,当我运行它时,输出是:

sum=0.000000, i=0
sum=1.100000, i=1
sum=3.300000, i=2

这一次,输出正常,但是在第一次输出中,为什么变量i的值总是1,有人能告诉我吗?

最佳答案

没什么可看的。您通过将错误的类型传递给 printf 来调用未定义的行为,因此程序的所有输出都是无意义的。 %f 格式说明符需要类型为 double 的参数(顺便说一句,float 会自动提升为 double在这种情况下,所以 float 也可以),但是你向它传递了一个 int 类型的参数。

关于c - 测试 unsigned int 值时的一件奇怪的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15755136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com