簡體   English   中英

結構指針和結構指針成員之間的區別

[英]difference between structure pointer and member of structure pointer

我在這里聲明一個結構

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

我用這個聲明創建一個指針

struct node *link;

nextlink指針之間有什么區別還是它們是相同類型的指針?

有一個區別。

鏈接指針可以具有初始值,但是下一個指針不能具有初始值,原因是:

每當我們聲明一個結構時,我們都在聲明一個新類型而不是一個新變量。

所以

struct node *link=NULL;

被允許

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

不被允許。

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;
}
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。 表示一部分有數據,另一部分有下一個節點的地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM