打印
[牛人杂谈]

指针的相互引用如何理解

[复制链接]
1082|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
734774645|  楼主 | 2024-3-5 14:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题如下:
有段程序看不懂啥意思,大概是这么操作的:
typedef struct{
  void *pa;
  其他成员;
} A_TypeDef;

typedef struct{
  void *pb;
  其他成员;
} B_TypeDef;

struct A_TypeDef A;
struct B_TypeDef B;

A.pa = &B;
B.pb = &A;
最后这两行这么搞有什么意义?

使用特权

评论回复
沙发
734774645|  楼主 | 2024-3-5 14:16 | 只看该作者
这段程序定义了两个结构体类型 A_TypeDef 和 B_TypeDef,它们分别包含一个 void 类型的指针成员以及其他成员。然后定义了两个结构体变量 A 和 B,分别属于这两个结构体类型。

接下来的两行代码是将结构体 A 中的 pa 成员指向结构体 B,并将结构体 B 中的 pb 成员指向结构体 A。这样做的目的是创建了一种相互引用的关系。

这种相互引用的结构在实际中常见于某些数据结构,比如双向链表中的节点,其中每个节点都包含指向前驱和后继节点的指针。在这里,A 和 B 之间的相互引用可能是为了某种特定的数据交换或数据访问场景而设计的,但具体意义要依赖于程序的上下文和需求。

使用特权

评论回复
板凳
ClarkLLOTP| | 2024-3-5 14:45 | 只看该作者
把这两个结构体绑定吧,让他俩可以随时找到对方

使用特权

评论回复
地板
734774645|  楼主 | 2024-3-5 16:29 | 只看该作者
ClarkLLOTP 发表于 2024-3-5 14:45
把这两个结构体绑定吧,让他俩可以随时找到对方

是的,我也是这么认为的,这是其他朋友群里问的, 我觉得很有意思,分享过来。

使用特权

评论回复
5
elsaflower| | 2024-3-5 20:51 | 只看该作者
指针的相互引用通常出现在C/C++编程中,指的是两个或多个指针彼此指向对方,形成一种循环引用关系。这种现象在指针变量之间是很常见的,特别是在处理链表、树等数据结构时。

使用特权

评论回复
6
lzbf| | 2024-3-5 22:26 | 只看该作者
指针的相互引用在C++中是一个较为高级且易出错的话题。它涉及两个指针互相指向对方,这在某些情况下非常有用,比如在实现双向链表的时候。然而,这种用法需要谨慎对待,因为错误的指针相互引用可能导致程序崩溃或者其他未定义行为。

使用特权

评论回复
7
linfelix| | 2024-3-6 08:15 | 只看该作者
在内存模型中,如果处理不当,特别是当涉及到动态内存分配时,相互引用可能导致内存泄漏,因为如果没有明确的解除引用,垃圾回收机制可能无法正确回收内存。在C++中,智能指针(如std::shared_ptr)的循环引用问题可以通过引用计数的方式来解决。

使用特权

评论回复
8
claretttt| | 2024-3-7 22:45 | 只看该作者
相互引用的关键在于理解指针本身就是一个变量,它可以存储其他变量(包括其他指针)的地址。当指针之间互相指向对方时,它们之间建立了关联关系。

使用特权

评论回复
9
uptown| | 2024-3-9 18:57 | 只看该作者
在双向链表中,每个节点有两个指针,一个指向下一个节点(next指针),另一个指向前一个节点(prev指针)。这样,可以通过相互引用实现节点之间的双向访问。

使用特权

评论回复
10
kkzz| | 2024-3-10 16:09 | 只看该作者
理解指针的相互引用对于掌握C++中的高级概念和数据结构非常有帮助。

使用特权

评论回复
11
alvpeg| | 2024-3-11 14:18 | 只看该作者
指针的相互引用是指两个或多个指针变量相互指向对方。这种情况通常发生在链表、树等数据结构中,其中一个节点包含指向其他节点的指针。在这种情况下,两个或多个节点的指针可能相互引用,形成一个循环。

使用特权

评论回复
12
hudi008| | 2024-3-11 16:54 | 只看该作者
考虑一个简单的双向链表,其中每个节点包含一个值和两个指针,一个指向前一个节点,另一个指向后一个节点。在这种情况下,相邻节点的指针相互引用。

使用特权

评论回复
13
febgxu| | 2024-3-11 19:13 | 只看该作者
如果你有两个相互引用的对象,当你试图删除这些对象时,你将面临一个问题:因为你不能删除一个正在被另一个指针引用的对象,这会导致内存泄漏。

使用特权

评论回复
14
eefas| | 2024-3-12 11:06 | 只看该作者
通常会导致逻辑错误或程序崩溃,因为当尝试访问或修改这些指针时,可能会引发无限递归或循环引用,从而导致程序栈溢出或资源耗尽。

使用特权

评论回复
15
mmbs| | 2024-3-12 14:31 | 只看该作者
相互引用可能在某些情况下是有用的,比如在实现共享数据结构或同步机制时。然而,在大多数情况下,相互引用应该避免,因为它可能导致内存泄漏或循环引用问题。

使用特权

评论回复
16
deliahouse887| | 2024-3-12 18:05 | 只看该作者
指针的相互引用是指两个或多个指针变量之间相互赋值或引用,形成一个循环引用的关系。

使用特权

评论回复
17
febgxu| | 2024-3-14 12:44 | 只看该作者
针的相互引用是指两个指针互相指向对方。这种情况下,两个指针都持有对方的地址,形成了一种相互引用关系。

使用特权

评论回复
18
alvpeg| | 2024-3-14 18:22 | 只看该作者
两个或更多的指针变量相互指向对方

使用特权

评论回复
19
adolphcocker| | 2024-3-14 22:50 | 只看该作者
如果 确实需要创建多个指针,并且它们之间需要相互引用,那么应该使用适当的数据结构(如结构体或联合体)来管理这些指针,并确保逻辑正确。

使用特权

评论回复
20
modesty3jonah| | 2024-3-15 13:42 | 只看该作者
在理解指针相互引用时,首先要明白指针是什么。指针是一个变量,其值为另一个变量的地址,即,它指向内存中的某个位置。当我们有两个指针变量相互指向对方时,实际上是在做两件事情:一是让一个指针指向另一个指针所指向的内存位置,二是让另一个指针也指向第一个指针所指向的内存位置。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

197

主题

3445

帖子

14

粉丝