指向字符串的指针以及赋值和解引用之间的区别

Cai*_*inG 0 c string printf pointers

在下面的代码中:

#include <stdio.h>

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

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我不完全理解为什么没有必要'*'printf通话中添加to消息。我是在假设条件下message,因为它是一个指针char,双引号字符串中的第一个字母,将显示该地址'H'

Bar*_*mar 5

%s格式运算符要求其相应的参数作为一个char *指针。它打印从该地址开始的整个字符串。字符串是一系列以空字节结尾的字符。这就是为什么会打印整个消息的原因。

如果提供数组作为相应的参数,它将自动转换为指向数组第一个字符的指针。通常,每当将数组用作r值时,都会进行此转换。

您不需要使用*运算符,因为参数应该是指针。如果您使用*message过,则只能将'H'字符传递给printf()。如果您使用的是%c格式而不是%s- 您将执行此操作-其对应的参数应为char