以下代码不打印任何内容:
#include<stdio.h>
#define TOTAL_SIZE ( (sizeof(array))/(sizeof(array[0])) )
int main()
{
int array[]={1,2,3}, d;
for(d=-1; d<=TOTAL_SIZE-2; ++d)
{
printf("%d\n", array[d+1]);
}
return 0;
}
d = -1&lt; = 3-2
打印数组[-1 + 1],即数组[0]
d = 0 <= 3-2
打印数组[0 + 1],即数组[1]
d = 1 <= 3-2
打印数组[1 + 1],即数组[2]
但即使打印出一个元素也没有!
但是这段代码产生了打印数组中所有元素的正确输出:
#include<stdio.h>
#define TOTAL_SIZE ( (sizeof(array))/(sizeof(array[0])) )
int main()
{
int array[]={1,2,3}, d;
for(d=0; d<=TOTAL_SIZE-1; ++d)
{
printf("%d\n", array[d]);
}
return 0;
}
但两个循环的净效果似乎相同。
如果我们用数组中的元素数替换宏TOTAL_SIZE
,它就可以工作。所以问题似乎与宏有关。
但是当我尝试打印TOTAL_SIZE
生成的值时,它会输出正确的值。
第一个程序有什么问题?
答案 0 :(得分:8)
宏的问题是sizeof
返回size_t
这是无符号整数类型,您要与签名 {进行比较{1}}。解决方案是将您的尺寸转换为int
。
int