指针的两种不同语法约定

Two different syntax conventions for pointers?

本文关键字:语法 约定 两种 指针      更新时间:2023-10-16

我从Meyer的更有效的C++中得到了以下内容:

string s1("Nancy");
string s2("Clancy");
string& rs = s1;     // rs refers to s1
string *ps = &s1;    // ps points to s1
rs = s2;             // rs still refers to s1, but s1’s value is now "Clancy"
ps = &s2;            // ps now points to s2; s1 is unchanged

我不明白为什么有一行取消引用一个分配给s1地址的指针,以"指向"s1:

string *ps = &s1;

还有一行没有取消引用指向"指向"s2的指针:

ps = &s2;

有人能帮我吗?事实上,两种不同的约定似乎在做同样的事情,这让我很困惑

string*ps=&s1;

在我看来,这最好写成string* ps = &s1;,但它们对编译器来说意义相同。您正在创建一个类型为"string*"(指向字符串的指针(的新变量"ps",并为其分配一个等于s1变量地址的初始值。绝对没有取消引用。。。该用法中的*指示指针类型而不是解引用操作。

ps = &s2;然后为ps指针分配一个新值,即s2字符串对象的地址。

string *ps = &s1;

ps设置为s1 的地址

ps = &s2;

将CCD_ 9设置为CCD_。

引用只能在定义变量的同一行上设置。之后的任何操作都会将右侧的值复制到左侧的引用值中。

指针可以随意设置,访问指针的内容时,需要使用*ps = ...ps[x](在这种情况下,除了x的0之外的任何值都是未定义的(

rs = s2;

在这一行中,rs是一个引用而不是指针。当s2被赋值为rs时,rs仍然指向相同的内存,但该指针处的值发生了变化。

ps = &s2;

这里ps是一个指针,这里s2的地址被分配给ps,之前的ps指向不同的位置,该位置本身被移动到其他内存。

因此指针和引用的行为发生了变化。