通过引用传递价值

时间:2018-01-13 08:59:54

标签: c pointers struct

有人可以解释这是什么吗?

struct p{
    int x;
    int y;
    struct p *ptr;
};

我无法理解我们再次写struct p的行。

3 个答案:

答案 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类型的两个变量bstruct p

    struct p a;
    struct p b;

初始化ab的成员:

    a.x = 1;
    a.y = 2;
    a.ptr = NULL;
    b.x = 3;
    b.y = 4;
    b.ptr = NULL;

在此之后,ab的内存中视图将是这样的:

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