【发布时间】:2017-01-18 18:41:00
【问题描述】:
以下是我遇到问题的代码。我了解常量,并相信我了解 sizeof 函数,但一定会遗漏一些东西。这是我试图自己解决的问题:
- printf 声明 TOTAL_ELEMENTS 作为 %d - 它返回 7
- printf TOTAL_ELEMENTS 的语句 - 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;
}
【问题讨论】:
-
可能是我使用的编译器;它应该显示数组的所有元素,但是当我尝试运行它时发生的所有事情都是它运行并以没有打印输出结束。
-
好的;我将代码复制到 ideone.com 到 C 编译器/执行器中,它也没有输出。但是,当我更改原始描述中列出的代码时,它会按预期工作;仍然不确定。
-
我得到相同的结果...没有输出。获得预期输出的唯一方法是分配
int dmax = (TOTAL_ELEMENTS-2);并将循环更改为for(d=-1;d <= dmax;d++)。