混淆 C++ 中的 & 和 *

Posted

技术标签:

【中文标题】混淆 C++ 中的 & 和 *【英文标题】:Confuse about & and * in the C++ 【发布时间】:2020-08-26 01:27:55 【问题描述】:

刚学过C++,下面的没看懂:

代码部分:

int *i = new int;
*i = 0;
int &j = *i;
j++;

问题:最后一行是什么意思:j++? 答:将i指向的值加一。

我的困惑: 我不确定int &j = *i;的含义

j和指针i是什么关系? j是指针还是其他?

【问题讨论】:

这能回答你的问题吗? What is a reference variable in C++? 【参考方案1】:

我不确定 int &j = *i; 的含义j和指针i有什么关系? j是指针还是其他?

int &j 正在声明一个变量j,类型为int&,或整数引用(请参阅What is a reference variable in C++?)。

int &j = *i 将地址i 的值分配给引用变量j。因此,无论何时修改 j,您都会修改 *i(反之亦然)。

另见:What are the differences between a pointer variable and a reference variable in C++?

【讨论】:

【参考方案2】:

我不确定int &j = *i;的含义

i 之前已初始化为指向(使用运算符new 动态分配)int 的指针。 *i 是对同一动态分配的 int 的引用。

在声明中,int &jj 声明为对 int 的引用。 = *i 导致 j 引用与 *i 相同的 int

j 可见的后续代码中,j 现在是对i 指向的int 的引用(替代名称或别名)。

j 的任何操作都会影响int,与对*i 执行相同操作的方式完全相同。

所以,j++ 具有后自增*i 的效果。

请注意运算符优先级和关联性规则。

++*i++j 是等价的,因为预增量(前缀 ++)和 *(用于指针取消引用)具有相同的优先级和关联性。 但是,*i++ 不等同于j++,因为后增量(后缀++)的优先级高于*。所以*i++ 等价于*(i++)j++ 等价于(*i)++

【讨论】:

以上是关于混淆 C++ 中的 & 和 *的主要内容,如果未能解决你的问题,请参考以下文章

混淆 C++ 语言中的字符串重复

[Js-c++]c++中的指针引用和数组名

书中“右值”和“右值引用”之间的混淆

C++ 对象参数混淆

C++ For 循环和数组混淆

C ++中的常量混淆[重复]