有人可以解释这是什么吗?
struct p{
int x;
int y;
struct p *ptr;
};
我无法理解我们再次写struct p
的行。
答案 0 :(得分:1)
只是一个struct p
,其中包含指针到struct p
。
例如,它可用于创建struct p
个对象的链接列表,其中一个struct p
包含指向下一个的指针作为创建序列的方法可变长度而不是具有固定长度的数组,并避免可能需要realloc
对象的可变长度连续动态向量的潜在昂贵的struct p
调用。
它也可能用于更复杂的数据结构,例如双向链表和二进制搜索树。
答案 1 :(得分:1)
我无法理解我们再次编写struct p
的界限
在结构p
声明中,您有:
struct p *ptr;
其中ptr
是一个指针,指向struct p
类型结构的地址,使struct p
成为一个自引用结构。
自引用结构是一种结构,其中一个成员是指向结构本身的指针。
让我们考虑一个例子:
假设您有a
类型的两个变量b
和struct p
:
struct p a;
struct p b;
初始化a
和b
的成员:
a.x = 1;
a.y = 2;
a.ptr = NULL;
b.x = 3;
b.y = 4;
b.ptr = NULL;
在此之后,a
和b
的内存中视图将是这样的:
a:
x y ptr
+-------------+
| 1 | 2 | NULL|
+-------------+
b:
x y ptr
+-------------+
| 3 | 4 | NULL|
+-------------+
struct p
是自引用结构,因为其成员变量ptr
指针之一可以指向struct p
类型。允许将b
的地址分配给ptr
的{{1}}:
a
看起来像:
a.ptr = &b; //assigning address of structure b to pointer a.ptr
现在,您可以使用a
+------------+
| 1 | 2 | --|----¬
+------------+ |
|
b V
+-------------+
| 3 | 4 | NULL|
+-------------+
访问结构b
的成员,如下所示:
a.ptr
其输出:
printf ("b.x : %d, a.ptr->x : %d\n", b.x, a.ptr->x);
自引用结构是最有用的功能之一,它允许您创建包含对与其自身相同类型的数据的引用的数据结构。我建议你尝试使用C语言实现b.x : 3, a.ptr->x : 3
数据结构,这样可以更好地理解自引用结构。
答案 2 :(得分:0)
这是一种自我参照结构。在最后一行中,您声明一个指向结构 compareFn(c1: any, c2: any):boolean{
return c1 && c2 ? c1.name === c2 : c1 === c2;
}
的指针ptr
。
与C中的指针和结构相处的有用资源可能是https://www.programiz.com/c-programming/c-structures-pointers