2012-04-05 24 views
1

我在C初学者,我有这样的代码:在这种情况下,数组索引中的字符表示如何工作?

#include <stdio.h> 
main() 
{ 
    int i; 
    int ndigit[10] = { [9] = 5 }; 
    printf("%d\n",++ndigit['9']); 
} 

这将输出值是这样的:

-1074223011 

但是,当我改变声明:

++ndigit['9'-'0'] 

正确打印值

6 

我想知道为什么需要在我的索引中添加-0以使其正常工作?而为什么只是提到++ndigit['9'],不帮我?

在此先感谢。

+0

该代码不编译.... – 2012-04-05 05:41:51

+7

提示:''9'!= 9'。 ''9'== 57'。 – cHao 2012-04-05 05:43:33

+1

'9'不必等于57.在任何情况下,ndigit都被重新声明,以便代码不会被编译。 – Wiz 2012-04-05 05:44:05

回答

6

如果您要访问的10数组中的元素,你这样做:

array[9] 

如果你想拥有的字符常量人数为9 + 1的值索引来访问元素,你这样做:

array['9'] 

由于方式ASCII(由C中,所有其它字符编码方案,看到奇才的评论)的定义,表达'9' - '0'实际上等于9,这可能混淆你在这种情况下。

+0

实际上,C使用的每个字符编码方案'9' - '0'必须等于9.标准保​​证:“在源和执行基本字符集中,值在上面的十进制数字列表中的0之后的每个字符的值应该大于前一个值的值。“ (它所谈论的清单是0 1 2 3 4 5 6 7 8 9)。 – Wiz 2012-04-05 05:56:19

+0

为什么这段代码执行并给出结果?......它试图访问一些超出内存区域的权限?它应该在这之前崩溃? – TutuGeorge 2012-04-05 05:56:46

+0

啊,整齐。我会将其添加到答案中,谢谢。 – 2012-04-05 05:56:54

相关问题