结构指针和结构指针成员之间的区别

时间:2015-08-21 16:06:39

标签: c structure

我在这里宣布一个结构

struct node
{
  int data;
  struct node *next;
};

我正在创建一个带有此声明的指针

struct node *link;

nextlink指针之间是否存在差异,还是指针类型相同?

3 个答案:

答案 0 :(得分:2)

有一点不同。

链接指针可以具有初始值,但是下一个指针不能具有初始值,原因是:

每当我们声明一个结构时,我们都声明一个新类型,而不是一个新变量。

所以

struct node *link=NULL;

允许

struct node
{
  int data;
  struct node *next=NULL;
};

是不允许的。

答案 1 :(得分:0)

struct node
{
  int data;
  struct node *next;
};

struct node *link

* next和* link都是指针,因此它们的大小将相同。它们指向的数据类型相同,即结构node。但它们完全不同:

struct node *p = malloc(sizeof (node)); //allocate memory for a new node

//now, p will point to an address.
//p->next is still un-initilized, so we have to assign it an address 

p->next = NULL; 

p, and p->next point to different addressess

所以两个指针是不同的,彼此独立存在。实际上,* link甚至不必是指针,您可以静态地为节点分配内存:

struct node p;
p.next=NULL

或者您可以将其他指针添加到节点结构中以获取更复杂的数据结构,例如树或双链表:

struct node
{
   int data;
   struct node* next;
   struct node* prev;
}

答案 2 :(得分:0)

struct node
{
  int data;
  struct node *next; // line 1
};

struct node *link; // line 2

第1行称为自引用结构,第2行只是给定结构的指针变量。 在链表中使用自引用结构,因为我们希望所有节点都具有相同的类型。假设,如果您声明struct node *p = malloc(sizeof (node)); 在这里,p创建了一些空间,并且该空间分为两个部分1. int数据2. * next。 表示一部分有数据,另一部分有下一个节点的地址。