c - 通过引用传递值

标签 c pointers struct

有人能解释一下这是什么吗?

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 参照结构。

自引用结构是其中一个成员是指向结构本身的指针的结构。

让我们考虑一个例子:

假设你有两个变量 ab类型 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 ab将会是这样的:

a:
  x   y   ptr
+-------------+
| 1 | 2 | NULL|
+-------------+

b:
  x   y   ptr
+-------------+
| 3 | 4 | NULL|
+-------------+

struct p是自引用结构作为其成员变量之一 ptr指针可以指向struct p类型。让我们分配地址bptra :

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/

相关文章:

c# - 使用 == 比较两个结构

c - 如何为复杂的语句创建示例?

c - C 中的 For 循环和数组

c - 将数据输入结构时出现段错误

c++ - 在 C++ 中的函数内更改二维数组的值

C++ 引用参数和 C 链接

c - struct sscanf 无法正常工作?

objective-c - 使用吗? : to do an assignment produce faster assembly than using if()?

c++ - 红黑树~1子删除

c++ - 函数结束后指针会死亡吗?