C 中的字符指针和对同一地址的多个引用

Char pointers in C and multiple references to same address

之前使用过 python,我无法理解字符指针。

#include <stdio.h>          // 1
main()                      // 2
{                           // 3
    char *str1 = "Good";    // 4
    char *str2;             // 5
    str2 = str1;            // 6
    printf("1. str1 = %s, str2 = %s\n", str1, str2);   // 7
    str2 = "Bad";                                      // 8
    printf("2. str1 = %s, str2 = %s\n", str1, str2);   // 9
}                                                      // 10

据我了解,
第 4 行:str1 保存 str1[0] 的地址(即 &str1[0])
在第 6 行:str2 指向 &s[0](因为 str1 持有 &str1[0])
在第 8 行中:str2 的值更改为 'Bad'。
但是,由于 str2 指向 &s[0],str1 也应该更改为 'Bad'。

执行后

str2 = "Bad";         

str2 指向不同的位置。它不再引用与 str1 相同的内存。这条语句并没有改变str2之前的值所指向的内存的内容。

指针基本上顾名思义。指针变量,仅类似于 str1 到&st1[0]。

*str1 -> &str1[0]
 str2 = str1

这使得 str2 也指向 &str1[0]。但它只是指向那个内存地址。 所以当你写

str2 = "Bad"

"Bad" 是内存中的一个字符串,它有自己的新地址。而你正在使用指针变量指向这个新地方。

要实际更新指针变量指向的内存地址,您必须像这样使用它

*str2 = "Bad"

当你使用str2时,你就是在使用变量。但是,*str2 实际上是在使用变量 str2 当前指向的底层地址。