Post

手撕指针第三章 | 字符串

0 作为终止符的 char 数组是应用最广泛的一种数组。 这是 C 语言存储字符串的最基本方式,因此我们常把以 0 作为终止符的 char 数组称为 C 风格字符串。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main() {
    /* 下面这条语句把 msg 声明为一个指向字符的指针,并用字符串中第一个字符的地址对该指针进行初始化 */
    char *msg = "Hello World!";

    /*
    与上述声明等价
    char *msg;
    msg = "Hello World!";
    */
    printf("%s\n", msg); /* Hello World! */
    printf("%c\n", *msg); /* H */
    printf("%c\n", *(msg + 1)); /* e */
    printf("%p\n", msg); /* 0x100de3f92 */

    return 0;
}

这种类型的声明所面临的一个危险是你很容易误解他的意思。看上去初始值似乎是赋值给表达式 *msg,而事实上它是赋值给 msg 本身的。

C++ 字符串字面值常量沿用了这一传统,并且某些标准库函数也是建立在这一用法之上的。 通常情况下,char*const char* 指向以 0 结尾的字符串序列。

This post is licensed under CC BY 4.0 by the author.