第七题:下面程序输出什么?为什么?

如题:

int main()
{
    const int SIZE = 10;
    char a[SIZE] = {1000, -1000, 256};  

    printf("%d\n", strlen(a));

    return 0;
}

此题第一个是编译错误,const修饰的变量是只读变量,而不是我们翻译的常量

也就是说SIZE还是变量,只是编译器在编译时从语法的层面不要它作为左值,但是这改变不了它变量的本质

大家想想数组定义时一定不能用变量做下标吧

把SIZE定义成宏可以改掉这个编译错误

剩下的就是输出了

大家的焦点在,数组中么有一个是字符

我想说的是,ascii码确实只有0--127, 但是不代表char只能表示ascii码,

对于操过char范围的值,我们的编译器会采用截断处理,

最后的256正好被截断成0, 所以输出2

posted @ 2013-02-20 22:18  海 哥  阅读(132)  评论(0编辑  收藏  举报