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 当前指向的底层地址。
之前使用过 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 当前指向的底层地址。