读书人

为啥没有打印?该怎么解决

发布时间: 2012-04-10 21:03:56 作者: rapoo

为啥没有打印?

C/C++ code
#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;}

为啥没有打印数组的值?

[解决办法]
bool bRes = (d <= TOTAL_ELEMENTS - 2);

bRes应该等于false
[解决办法]
宏定义只是替换

sizeof(array) 的返回值类型是 size_t即是unsigned int,类型隐式转换,-1 是一个很大 unsigned int

#define TOTAL_ELEMENTS (int) (sizeof(array1) / sizeof(array1[0]))


[解决办法]
《C专家编程》有说到这个问题。http://ishare.iask.sina.com.cn/f/9256276.html?from=isnom在这电子书的29页。
当 d <= TOTAL_ELEMENTS - 2 进行比较时。会把d自动提升为unsigned int 类型。所以出错了。

读书人网 >C语言

热点推荐