以下代码不输出任何内容:
#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 <=3-2
prints array[-1+1] which is array[0]
d=0 <=3-2
prints array[0+1] which is array[1]
d=1 <=3-2
prints array[1+1] which is array[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
生成的值时,它会打印正确的值。
第一个节目有什么问题?
发布于 2017-02-18 17:30:08
宏的问题是,sizeof
返回一个size_t
,它是与有符号int
相比的无符号整数类型。解决方案是将您的大小转换为int
。
#define TOTAL_SIZE (int)( (sizeof(array))/(sizeof(array[0])) )
https://stackoverflow.com/questions/42318293
复制相似问题