以下代码不打印任何内容:
#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;
}
Run Code Online (Sandbox Code Playgroud)
d = -1 <= 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;
}
Run Code Online (Sandbox Code Playgroud)
但两个循环的净效应似乎是相同的.
如果我们用TOTAL_SIZE数组中的元素数替换宏,它就可以工作.所以问题似乎与宏有关.
但是当我尝试打印生成的值时TOTAL_SIZE,它会打印正确的值.
第一个程序有什么问题?
小智 8
与宏的问题是,sizeof返回的size_t是一个无符号您要比较的整数类型签字 int.解决方案是将您的尺寸投射到int.
#define TOTAL_SIZE (int)( (sizeof(array))/(sizeof(array[0])) )
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |