在这种情况下,数组索引中的字符表示如何工作?

Ant*_*t's 2 c arrays char

我是C的初学者,我有这样的代码:

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

这打印的值如下:

-1074223011
Run Code Online (Sandbox Code Playgroud)

但是,当我将声明更改为:

++ndigit['9'-'0']
Run Code Online (Sandbox Code Playgroud)

它正确打印该值

6
Run Code Online (Sandbox Code Playgroud)

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

提前致谢.

Mic*_*kis 7

如果要访问数组中的第10个元素,请执行以下操作:

array[9]
Run Code Online (Sandbox Code Playgroud)

如果要访问索引处的元素,该元素具有数字9+ 1 的字符常量值,则执行以下操作:

array['9']
Run Code Online (Sandbox Code Playgroud)

由于定义了ASCII(以及C使用的所有其他字符编码方案,请参阅Wiz的注释),表达式'9' - '0'实际上等于9,这可能会使您在这种情况下感到困惑.