有人能解释一下这是什么吗?
struct p{
int x;
int y;
struct p *ptr;
};
我无法理解我们再次编写struct p
的那一行。
最佳答案
I can't understand the line where we again write struct p
在结构中p
声明,你有:
struct p *ptr;
哪里ptr
是一个指针,可以指向struct p
的地址类型结构使得struct p
self 参照结构。
自引用结构是其中一个成员是指向结构本身的指针的结构。
让我们考虑一个例子:
假设你有两个变量 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;
此后,内存中 View a
和b
将会是这样的:
a:
x y ptr
+-------------+
| 1 | 2 | NULL|
+-------------+
b:
x y ptr
+-------------+
| 3 | 4 | NULL|
+-------------+
struct p
是自引用结构作为其成员变量之一 ptr
指针可以指向struct p
类型。让我们分配地址b
至ptr
的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);
其输出:
b.x : 3, a.ptr->x : 3
自引用结构是最有用的功能之一,它允许您创建包含对与其自身类型相同的数据的引用的数据结构。我建议您尝试实现Linked List
使用C语言的数据结构,这将使您更好地理解自引用结构。
关于c - 通过引用传递值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48238384/