【发布时间】:2022-08-02 16:34:58
【问题描述】:
为什么这段代码实际上会打印出 \"HI!\" ? char *s 是字符串第一个字符的地址,因此在下一行代码中,当我们将变量 s 放入 printf 时,它应该将该字符的地址返回给 printf,这显然不能用%s 表示为字符串。但确实如此。为什么?
#include <stdio.h>
int main(void)
{
char *s = \"HI!\";
printf(\"%s\\n\", s);
}
-
C 中的字符串是引导第一个空字符的一系列连续字符。因此,虽然
s指向存储H的地址是正确的,但更正确的说法是它也指向一个字符数组:{\'H\', \'I\', \'!\', \'\\0\'}。%s格式说明符告诉printf包含从地址s开始的每个字符,直到第一个空字符。 -
printf函数只是冰山一角。在它下面有大量的子例程,具体取决于格式化字符串。也就是说,当您放置%s格式化程序时,printf将寻找char类型指针在参数中,因为它需要在内部使用该指针。