鱼C论坛

 找回密码
 立即注册
查看: 1346|回复: 2

-> 运算符

[复制链接]
发表于 2023-11-7 00:17:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
p1.p2 都是指针,但 (p2->next)=p1;    和                p2->next=p1;                运行不一样,为什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-7 00:18:37 | 显示全部楼层
这两个表达式的运行结果不同,原因是它们使用了不同的赋值方式。

在表达式(p2->next) = p1; 中,我们使用了括号将 p2->next 包裹起来,这是因为箭头运算符 "->" 的优先级比赋值运算符 "=" 更高。这意味着先执行箭头运算符,获取 p2 指针指向的结构体或对象的 next 成员,然后将 p1 的值赋给这个 next 成员。这样,p2 指针指向的结构体或对象的 next 成员就被修改为 p1 的值。

而在表达式 p2->next = p1; 中,没有使用括号,因此赋值运算符 "=" 的优先级比箭头运算符 "->" 更高。这意味着先执行 p2->next,获取 p2 指针指向的结构体或对象的 next 成员的地址,然后将 p1 的值赋给这个地址。这样,p2 指针指向的结构体或对象的 next 成员的值被修改为 p1 的值。

所以,这两个表达式的运行结果不同。第一个表达式修改了 p2 指针指向的结构体或对象的 next 成员的值,而第二个表达式修改了 p2 指针指向的结构体或对象的 next 成员所存储的地址的值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-7 00:19:07 | 显示全部楼层
在C/C++中,指针的赋值操作是将一个指针变量指向另一个内存地址。

下面来详细解释 (p2->next) = p1;p2->next = p1; 的区别。

1. (p2->next) = p1;:这条语句将指针 p1 的值赋给了 p2 指针指向的 next 成员变量。这意味着我们改变了 p2 所指向的节点的 next 指针,使其指向了 p1 所指向的节点。这实际上改变了链表的结构。

   这种情况下,如果 p2 原本指向的节点的 next 指针不为空,那么该指针将会被覆盖,导致原链表中的一部分节点无法访问。这种操作可能会破坏链表的完整性,导致内存泄漏或者访问错误。

2. p2->next = p1;:这条语句将指针 p1 的值直接赋给了 p2 指针所指向节点的 next 成员变量。这实际上是修改了 p2 所指向节点的 next 指针的值,使其指向了 p1 所指向的节点。

   这种情况下,并没有改变链表的结构,只是将节点的 next 指针指向了另一个节点,保持链表的完整性。

总结来说,(p2->next) = p1; 是将指针 p2 所指向节点的 next 指针的值修改为 p1 的值,而 p2->next = p1; 是将指针 p2 所指向节点的 next 指针直接指向 p1 所指向的节点。

希望这个解释对你有帮助。如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 05:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表