首页 > 解决方案 > 指向字符串的指针以及赋值和取消引用之间的区别

问题描述

在以下代码中:

#include <stdio.h>

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

    return 0;
}

我不完全理解为什么没有必要在通话中预先'*'添加消息。printf我的假设是message,由于它是指向 a 的指针,双引号字符串中的第一个字母char将显示.'H'

标签: cstringpointersprintf

解决方案


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

如果您提供一个数组作为相应的参数,它会自动转换为指向数组第一个字符的指针。通常,只要将数组用作 r 值,它就会进行这种转换。

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


推荐阅读