gpt4 book ai didi

c - 谜语(C)

转载 作者:太空狗 更新时间:2023-10-29 16:31:29 27 4
gpt4 key购买 nike

一个 friend 给了我一个谜语:

#include<stdio.h>

#define TOTAL_ELEMENTS ((sizeof(array) / sizeof(array[0])))
int array[] = {23,34,12,17,204,99,16};

int main()
{
int d;
for(d=-1;d <= (TOTAL_ELEMENTS-2);d++)
printf("%d\n",array[d+1]);
getchar();
return 0;
}

上面的代码应该打印所有的数组元素,代码中有什么问题(输出什么也没有)?我认为循环甚至不会迭代一次?

我发现以下代码确实有效:

#include<stdio.h>



#define TOTAL_ELEMENTS ((sizeof(array) / sizeof(array[0])))
int array[] = {23,34,12,17,204,99,16};

int main()
{
int d;
int x = (TOTAL_ELEMENTS-2);
for(d=-1;d <= x;d++)
printf("%d\n",array[d+1]);
getchar();
return 0;
}

我有一个理论认为它与宏有关,但我不能指出这个问题。

最佳答案

问题是 (TOTAL_ELEMENTS-2)是一个无符号值。当你进行比较时d <= (TOTAL_ELEMENTS-2) , 两个值都转换为无符号值,结果为 false。

在你的第二个例子中,x已签名,所以没有问题。

关于c - 谜语(C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5611724/

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