1

结构中的自引用指针和指向结构的指针有什么区别?

    struct abc
    {
    int data;
    struct abc *next;
    }
    struct abc *pt;
  1. *next和有什么区别*pt??

  2. 它们的用途有何不同?

我真的很怀疑这两者

我是初学者

第一个例子主要用于链表

指向结构节点的指针和自引用指针是一回事吗?

请参见

请参阅-programming.blogspot.in/2013/05/chain-hashing-separate-chaining-with.html 在这里我们使用了 struct hash *hashTable 作为数组 ..how?? 我们可以对 *pt 做同样的事情吗

4

5 回答 5

4
  1. 它们属于同一类型。它们的行为方式完全相同。

    一些示例用法:

    // declare 2 structs
    struct abc s1;
    struct abc s2;
    
    // point pt to s1
    pt = &s1;
    
    // point s1.next to s2
    s1.next = &s2;
    
    // access pt->data
    int a = pt->data;
    
    // access s1.next->data
    int a = s1.next->data;
    
  2. 用法上的区别:

    • 只有一个pt变量。

    • 对于每一个struct abc变量,都有一个next变量。

    在链表的上下文中,只有一个头指针,pt就是这样。
    但是每个节点都指向下一个节点,因此next应该用于此。

  3. 使用指针作为数组?

    是的,这可以通过pt或来完成next

    指针只是指向内存中的地址。在该位置可以有任意数量的结构相互跟随。

    如果您想将其用作数组(或通常仅使用指针),您只需确保不要尝试访问未分配内存的元素(malloc例如)并在之后释放内存用法(如果您使用过malloc)。

    数组的一些示例用法:

    // declare a struct
    struct abc s1;
    
    // make an array of size 10
    struct abc *a1 = malloc(10*sizeof(struct abc));
    
    // give the 4th element a new value
    a1[4] = s1;
    
    // free the memory
    free(a1);
    

我希望这会有所帮助。

于 2013-08-26T19:47:19.193 回答
1

从概念上讲,差别很小。

  1. next是它所指向的同一结构的成员。 pt不是它所指向的结构的成员。
  2. 它们以类似的方式使用,除了要使用next你有一个现有的struct abc,并且pt可以直接使用。请考虑:
    myABC.next= &myOtherABC ;
    pt= &myOtherABC ;

是指向结构节点的指针和自引用指针相同的东西

他们是,他们不是。取决于观点。它们因为它们都指向一个结构。它们不是因为 apointer to structure可以指向任何结构,并且作为变量,它可以是参数、局部变量、另一个的成员struct等。但是 aself referential pointer必然是 a 的成员struct并且指向同一个struct它是.

于 2013-08-26T19:55:47.483 回答
1

唯一的区别适用于编写编译器的人。这是因为自引用指针在完全声明自身之前引用自身。所以编写编译器的人必须处理这种特殊情况。

作为程序员(这意味着),没有区别,并且这些术语没有提供任何额外的含义。

于 2013-08-26T20:04:33.697 回答
0
  1. 它们是相同的类型,但它们不包含相同的值

  2. 从 pt 您可以访问 next,因为 pt 指向包含 next 的结构。但从下一个你不能访问 pt。

对于链表,您必须了解,列表包含开头 1 元素,并且该元素知道如何到达列表的下一个元素,这是下一个指针的目标

于 2013-08-26T19:58:31.060 回答
0

这两个指针之间没有区别。

用法上的可能差异取决于上下文,但仍然不适用于它们作为指向同一类型结构的指针并因此在分配、读取和算术方面遵循相同规则的性质。

于 2013-08-26T20:00:32.997 回答