printf语句的异常输出

shi*_*tra 1 c arrays

printf("%c",3["abcde"]);
Run Code Online (Sandbox Code Playgroud)

该语句如何产生输出d?编译器如何执行此语句?我理解为一个int数组,其中a[5]= 5[a]since *(a+5)= *(5+a).但是这里的字符串充当除字符串名称(变量名称)之外的索引.

Sou*_*osh 6

在你的情况下

 printf("%c",3["abcde"]);
Run Code Online (Sandbox Code Playgroud)

可以读作

 printf("%c","abcde"[3]);
Run Code Online (Sandbox Code Playgroud)

或者,作为我们最熟悉的语法,

char p [] = "abcde";
printf("%c",p[3]);
Run Code Online (Sandbox Code Playgroud)

它基本上归结为访问数组索引3中的元素(C使用基于0的数组索引).

这只是数组索引的语法糖.你可以用任何你喜欢的方式.

如果您想挖掘更多以便更好地理解,您可以查看此问题和相关答案.


注意:被Nitpicky

你的代码片段是一个声明,不要称之为程序.


dbu*_*ush 5

数组访问器运算符[]可以"双向"工作,因此3["abcde"]相当于"abcde"[3]和索引3(0为开头)包含d.

编辑:

我们有一个字符串常量而不是变量这一事实并不重要.字符串常量存储在内存的只读部分中,并隐式输入const char *.所以以下内容相当于您发布的内容:

const char *str = "abcde";
printf("%c",3[str]);
Run Code Online (Sandbox Code Playgroud)