在以下代码中:

#include <stdio.h>

int main(void) {
    char* message = "Hello C Programmer!";
    printf("%s", message);

    return 0;
}

我不完全理解为什么不需要在'*'调用中预先将printf消息置于message之前。我假设char,因为它是指向'H'的指针,双引号字符串中的第一个字母,将显示的地址。

最佳答案

format运算符要求其相应的参数为指针。它打印从该地址开始的整个字符串。字符串是以空字节结尾的字符序列。这就是为什么这会打印出整个信息。
如果提供一个数组作为相应的参数,它将自动转换为指向数组第一个字符的指针。一般来说,当数组用作r值时,它会进行这种转换。
不需要使用%s运算符,因为参数应该是指针。如果使用char *,则只会将*字符传递给*message。如果使用的是'H'格式而不是printf(),则可以执行此操作--其对应的参数应该是a%c

关于c - 指向字符串的指针以及赋值和解引用之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56941207/

10-11 16:48
查看更多