我在这里宣布一个结构
struct node
{
int data;
struct node *next;
};
我正在创建一个带有此声明的指针
struct node *link;
next
和link
指针之间是否存在差异,还是指针类型相同?
答案 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。
表示一部分有数据,另一部分有下一个节点的地址。