打印 char 数组的每个字符而不是每个部分字符

Printing each character of char array instead of each partial one

最近我在考试中发现一个有趣的问题:下面的代码会打印什么。我想知道为什么这段代码没有按顺序打印字符数组的每个字符(即“dcba”),而是每个部分字符(即“dcdbcdabcd "), 顺序相反。

对了,我也想知道这个问题跟哪个话题有关

谢谢!

#include <iostream>
#include <string.h>

int main()
{
    char mess[] = "abcd";
    char* ptr;
    ptr = mess + strlen(mess);
    while (ptr > mess)
        printf("%s", --ptr);
    return 0;
}

char mess[] = "abcd"; 表示 mess 又名 &mess[0] 是字符串 {'a', 'b', 'c', 'd', [=14=] } 的地址。 ptr = mess + strlen(mess);表示ptr最初指向mess[=17=]。在循环中 ptr 递减,随后的 printf() 将从 ptr 指向的位置打印直到它看到 [=17=] (即 mess 的尾部):

// initial:
abcd[=10=]
^----- mess aka &mess[0]
     ^ ptr = mess + strlen(mess) = mess + 4

这是因为 printf 中的格式化程序每次都打印一个字符串,而不是一个字符。所以它打印从 ptr 开始到 mess.

结束的字符串