使用printf语句的不寻常输出

这个问题在这里已经有了答案:

  • 对于数组,为什么会出现[5] == 5 [a]? 17个答案

  • 在你的情况

     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个元素。

    链接地址: http://www.djcxy.com/p/86735.html

    上一篇: Unusual output with printf statement

    下一篇: Why does x[y] == y[x] in c++?