gpt4 book ai didi

C程序——关于sizeof和constant一起使用

转载 作者:太空宇宙 更新时间:2023-11-04 03:25:16 25 4
gpt4 key购买 nike

下面是我遇到问题的代码。我了解常量并相信我了解 sizeof 函数,但一定遗漏了一些东西。这是我试图自己解决的问题:- printf 语句,TOTAL_ELEMENTS 作为 %d - 它返回 7- TOTAL_ELEMENTS 的 printf 语句 - 2 - 它返回 5(如预期)- 在 for 循环中替换 5 - 循环正确运行- 初始化一个任意名称的全局 int 变量并将其设置为等于 (sizeof(array)/sizeof(array[0]))。然后在 TOTAL_ELEMENTS 所在的 for 循环中使用变量 - 循环再次正确运行。

所以(至少在我看来),它必须是同时涉及常量和 sizeof 函数的东西 - 我肯定数组/数组 [0] 也起作用但通过测试和替换我不能找出问题所在。我已经阅读了 sizeof 函数以及常量但无济于事。我试过搜索但没有找到任何地方,因为我不完全确定我在搜索什么。我不一定需要答案,但如果有人能指出我正确的方向,我将不胜感激。提前谢谢你。

#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]);

return 0;
}

最佳答案

此问题与 sizeof 无关。这是因为比较有符号和无符号值。在您的代码中,(TOTAL_ELEMENTS-2) 有一个无符号值,但 d 是一个有符号变量。因此,for 条件会将 5 与 0xFFFFFFFF 进行比较,如果 5 小于 0xFFFFFFFF,则它始终为假!例如:

int main()
{
int d;
unsigned int e = 5;
for (d = -1; d <= e; d++)
printf("%d\n", array[d + 1]);

return 0;
}

它不打印任何东西! ,与您的代码相同。

关于C程序——关于sizeof和constant一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41727050/

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