混淆 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 &j
将 j
声明为对 int
的引用。 = *i
导致 j
引用与 *i
相同的 int
。
在j
可见的后续代码中,j
现在是对i
指向的int
的引用(替代名称或别名)。
对j
的任何操作都会影响int
,与对*i
执行相同操作的方式完全相同。
所以,j++
具有后自增*i
的效果。
请注意运算符优先级和关联性规则。
++*i
和 ++j
是等价的,因为预增量(前缀 ++
)和 *
(用于指针取消引用)具有相同的优先级和关联性。
但是,*i++
不等同于j++
,因为后增量(后缀++
)的优先级高于*
。所以*i++
等价于*(i++)
但j++
等价于(*i)++
。
【讨论】:
以上是关于混淆 C++ 中的 & 和 *的主要内容,如果未能解决你的问题,请参考以下文章