在C ++中混淆&和*

问题描述

我刚刚学习过C ++,但我不理解以下内容

代码部分:

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

问题:最后一行的含义是:j++
答案:将i指向的值加1。

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

的含义

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

解决方法

我不确定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++?

,

我不确定int &j = *i;

的含义

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

在声明中,int &j声明j是对int的引用。 = *i使j成为与int相同的*i的引用。

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

j进行的任何操作都会对int产生影响,就像对*i进行相同操作一样。

因此,j++具有后递增*i的作用。

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

  • ++*i++j是等效的,因为前置增量(前缀++)和*(用于指针取消引用)具有相同的优先级和关联性。
  • 但是,*i++不等于j++,因为后递增(后缀++)的优先级比*高。因此*i++等效于*(i++),但j++等效于(*i)++