【问题标题】:pointer to structure and self pointers指向结构的指针和自指针
【发布时间】:2023-04-04 12:00:01
【问题描述】:

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

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

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

我真的很怀疑这两者之间的关系

我是初学者

第一个例子主要用于链表

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

please see

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

【问题讨论】:

  • 没有区别;它们都只是指向struct abc 对象的指针。任何区别仅在于它们的使用方式(并且您没有显示任何使用它们的代码,所以这里没有太多要说的......)
  • 指向结构内部和外部结构的指针有什么区别,您能否举例说明它们的工作方式不同或行为方式相同

标签: c algorithm pointers structure


【解决方案1】:
  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. 将指针用作数组?

    是的,这可以通过ptnext 完成。

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

    如果您想将其用作数组(或通常仅使用指针),您只需确保不要尝试访问未为其分配内存的元素(例如 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);
    

希望对你有所帮助。

【讨论】:

  • 指向结构内部和外部结构的指针有什么区别,您能否举例说明它们的工作方式不同或行为方式相同
  • see-programming.blogspot.in/2013/05/chain-hashing-separate-chaining-with.html 在这里我们使用了 struct hash *hashTable 作为数组 ..how??我们可以用 *pt 做同样的事情吗
  • 我们需要释放数组吗
  • 是的,在声明树节点或链表节点等节点时,我们是否需要使用 malloc 为其分配空间?不能像声明 int 那样声明它吗??
  • @ayushnigam 我们还需要使用malloc 为链表或树节点分配空间。如果我们尝试不使用它,我们将不可避免地最终尝试访问超出范围的变量,即undefined behaviour
【解决方案2】:

从概念上讲,差别很小。

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

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

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

【讨论】:

  • see-programming.blogspot.in/2013/05/chain-hashing-separate-chaining-with.html 在这里我们使用了 struct hash *hashTable 作为数组 ..how??我们可以用 *pt 做同样的事情吗
【解决方案3】:

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

作为一名程序员(即),没有区别,而且这些术语没有提供任何额外的含义。

【讨论】:

    【解决方案4】:
    1. 它们是相同的类型,但它们不包含相同的值

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

    对于链表,你要明白,链表的开头有1个元素,这个元素知道如何到达链表的下一个元素,它是next指针的目标

    【讨论】:

    • 我们是否需要使用 malloc 为任何结构分配内存?不能像声明 int 那样声明它
    • 您可以将其声明为 int。像这样:struct abc 变量; // 变量是名字
    • 那么在创建节点时为什么要通过 malloc 分配空间??
    • 有两种方法,要么你用 malloc 从一个指针声明它,要么你声明它'像一个 int' 它是相同的结果,malloc 的优点是你可以随时释放它不再需要它了
    • 免费它对我有什么好处??
    【解决方案5】:

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

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

    【讨论】:

    • 你能说出用法的区别吗??
    • @ayushnigam:我不能,因为使用的是代码,我看到很少有资源知道代码。
    • see-programming.blogspot.in/2013/05/chain-hashing-separate-chaining-with.html 在这里我们使用了 struct hash *hashTable 作为数组 ..how??我们可以用 *pt 做同样的事情吗
    • @ayushnigam:struct hash *struct node * 不同。我看不出链接代码与您向我们展示的代码有何关联(至少与使用 strcut hash * 的方式不同)。
    猜你喜欢
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 2012-03-28
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多