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

C Program - About Sizeof and Constant Used Together

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

所以(至少在我看来),它必须涉及常量和 sizeof 函数 - 我很肯定 array/array[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;
}

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