问题描述
我刚刚学习过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)++
。