指向struct的指针 - 几个问题

时间:2012-08-21 08:31:27

标签: pointers struct

#include<stdio.h>
#include<stdlib.h>

/* Link list node */
struct node
{
    int data;
    struct node *next;
};

/* Function to reverse the linked list */
static void reverse(struct node** head_ref)
{
    struct node *prev   = NULL;
    struct node *current = *head_ref;
    struct node *next;
    while (current != NULL)
    {
        next  = current->next; 
        current->next = prev;  
        prev = current;
        current = next;
    }
    *head_ref = prev;
}
  1. 在反向函数中以struct开头的行是什么? 他们是否扩展原始结构或创建原始结构指向的新结构?我真的不明白为什么原始结构没有名称
  2. struct node *next;struct node* next;之间是否存在差异?

2 个答案:

答案 0 :(得分:1)

  1. struct node *prev是类型“指向struct node的指针”的变量prev的声明。这些行只是声明了一些局部变量。 prev包含指向最后处理节点的指针,current包含指向当前处理节点的指针,next用于保存指向原始列表的下一个节点的指针。

  2. struct node *nextstruct node* next之间没有区别。

答案 1 :(得分:1)

@willys是对的。我们知道struts是一组相似且不相似的数据类型。当创建struct时,它会分配一块内存。并且该内存有一个地址。

struct node{
    int age;
    char name[20];
    struct node *next_address; //Address of its type (self referential structure)
}

上面的struct分配了一块内存。在这个块中,存储了3个不同的数据(年龄,名称和结构node的地址)

当你想存储更多的块(用于存储更多数据)时,你需要分配更多的struct.But,当所有结构在内存中分配时都存在问题,它们之间没有任何关系。它们内存泄漏的原因。

因此,在每个已分配内存块上保留地址字段,以便任何内存块都可以存储其最近块的地址。

它,Linked List的真正风味值。所以,没有关于结构名称的混淆。