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

时间:2018-10-23 12:37:53

标签: c arrays string pointers c-strings

以前使用过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也应更改为“不良”。

2 个答案:

答案 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当前指向的基础地址。