c++ - 指针的两种不同语法约定?

标签 c++ pointers

我从 Meyer 的 More Effective 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

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

string *ps = &s1;

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

ps = &s2;

有人可以帮我吗?事实上,两个不同的约定似乎在做同样的事情,这让我感到困惑。

最佳答案

string *ps = &s1;

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

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

关于c++ - 指针的两种不同语法约定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16913119/

相关文章:

c++ - 如何对派生类进行相等性测试

c++ - 读取 .wav 文件 - 不读取标题?

c++ - Boost 智能指针和非 POD 类型 (C++)

c - 在 C 中使用 ** 时的差异

c - 在 C 中的 for 循环和 if 语句中使用 Malloc 数组 - 导致分段

c++ - 使用指针写入标准容器

c++ - 函数的最小值

c++ - 创建一个调用其他 Lua 函数的 C++ 函数

c++ - Ubuntu 12.04 上的教程 OpenGL 4

C - 通过传递指针改变函数外部变量的值