如何解决在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)++
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。