以前使用过python,我在理解char指针时遇到了麻烦。
#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的值更改为“不良”。
但是,由于str2指向&s [0],因此str1也应更改为“不良”。
答案 0 :(得分:1)
执行后
str2 = "Bad";
str2指向其他位置。它不再引用与str1相同的内存。该语句不会更改str2以前的值所指向的内存的内容。
答案 1 :(得分:0)
基本上,指针就是它的名字。指针变量,仅类似于str1 将指向&st1 [0]。
*str1 -> &str1[0]
str2 = str1
这使str2也指向&str1 [0]。但这只是指向该内存地址。 所以当你写
str2 = "Bad"
“错误”是内存中的字符串,具有自己的新地址。并且您正在使用指针变量指向这个新位置。
要真正更新指针变量指向的内存地址,您必须像这样使用它
*str2 = "Bad"
使用str2时,您正在使用变量。但是,当* str2时,您实际上正在使用变量str2当前指向的基础地址。