打印 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
.
结束的字符串
最近我在考试中发现一个有趣的问题:下面的代码会打印什么。我想知道为什么这段代码没有按顺序打印字符数组的每个字符(即“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
.