使用printf语句的不寻常输出
这个问题在这里已经有了答案:
在你的情况
printf("%c",3["abcde"]);
可以读为
printf("%c","abcde"[3]);
或者,作为我们最熟悉的语法,
char p [] = "abcde";
printf("%c",p[3]);
它基本归结为访问数组索引3中的元素(C使用基于0的数组索引)。
这仅仅是一个用于数组索引的语法糖。 你可以使用任何你喜欢的方式。
如果你想挖掘更多的理解,你可以看看这个问题和相关的答案。
注意:是Nitpicky
你的片段是一个声明,不要称之为程序。
数组访问器操作符[]可以“双向运行”,所以3["abcde"]等同于"abcde"[3] ,索引3(以0为开始)包含d。
编辑:
我们有一个字符串常量而不是变量的事实并不重要。 字符串常量存储在内存的只读部分,并隐式键入为const char * 。 因此,以下内容等同于您发布的内容:
const char *str = "abcde";
printf("%c",3[str]);
3["abcde"]等同于*(3 + "abcde") ,因此等同于"abcde"[3] 。
当在表达式中使用时,除了一些例外, "abcde"将被转换为指向其第一个元素的指针,即它基本上给出字符串"abcde"的基地址。
将基地址添加到3将给出字符串"abcde"的第4个元素的地址,因此3["abcde"]将给出第4个元素。
