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



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

顺便说一下,我还想知道哪个主题与这个问题有关。

谢谢!

#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', }的地址。ptr = mess + strlen(mess);表示ptr最初指向mess。在循环中,ptr递减,随后的printf()将从ptr指向的位置开始打印,直到它看到(即mess的尾部):

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

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

相关内容

  • 没有找到相关文章

最新更新