【发布时间】:2021-10-15 06:42:11
【问题描述】:
当我们这样做时:
char *p;
p="Hello stackoverflow";
printf("%s",p);
它会打印 Hello stackoverflow 但是根据我的理解,指针只能保存内存地址而不是文本字符串,为什么我们不应该像 printf("%s",*p); 这样取消引用指针而不是p ? couz only p 的意思是给我们指针保存的内存地址而不是内容!任何解释!谢谢。
【问题讨论】:
-
您只需要查看
printf的规范。它声明对于%s格式说明符,它需要一个指向char的指针,而不是char。如果您提供char,它如何知道在哪里可以找到其他字符? -
是的,有可能。如果你取消引用你会得到第一个字符,不适合
%s。 -
字符串文字是一个数组。在许多情况下,数组会被转换 (decay) 为指向其第一个元素的指针。这是您分配给
p的转换结果(指向char 的指针),这没关系,因为两者(p和conversion from the array)具有相同的类型。
标签: c pointers implicit-conversion string-literals