結構體指標

2021-08-08 02:24:34 字數 1639 閱讀 3558

一、結構體指標的定義與使用

當乙個指標變數用來指向乙個結構體變數時,稱之為結構體指標變數。

結構體指標變數的值是所指向的結構體變數的起始位址。通過結構體指標即可訪問該結構體變數,這與陣列指標和函式指標的情況是相同的。

結構體指標變數定義的一般形式:

結構體名 *結構體指標變數名

當然也可以在定義結構體的同時定義這個結構體指標變數。

例如:(定義乙個結構體(型別為自己定義的 student)指標變數 p)

struct student *p;
也可寫成

struct student;

student *p;

與前面討論的各類指標變數相同,結構體指標變數也必須

要賦值後才能使用。賦值是把結構體變數的

首位址賦予該指標變數,不能把結構名賦予該指標變數。

例如:如果 p 是被定義為 student 型別的結構體指標變數,boy 是被定義為 student 型別的結構體變數,則:p=&boy 是正確的,而 p=&student 是錯誤的。

引用結構體指標變數指向的結構體變數的成員的方法如下:

①、指標名->成員名

②、(*指標名).成員名 

例如:(*p).score 與 p->score 是等價的。

【例 14】結構體指標運用舉例

#includeusing namespace std;

struct student;

struct student s[3]=,,};

int main()

return 0;

}

【說明】這裡p++起到移動指標的作用,隨著 p 的變化,輸出陣列不同元素內容。

不用指標:

#includeusing namespace std;

struct student;

struct student s[3]=,,};

int main()

;

這種型別的自引用是非法的,因為成員 p 是另乙個完整的結構,其內部還將包含它自己的成員 p。這第 2 個成員又是乙個完整的結構,它還將包含自己的成員 p……這樣重複下去就永無止境了。這有點像永遠不會終止的遞迴程式。

但下面這個程式是合法的:

struct stu;
這個宣告和前面那個宣告的區別在於 p 現在是乙個

指標而不是結構體。編譯器在結構體的長度確定之前就已經知道指標的長度,所以這種型別的自引用是合法的。

當乙個結構體中有乙個或是多個成員是指標,它們所指向的型別就是本結構體型別時,通常這種結構體稱為「引用自身的結構體」,即「自引用結構」。這種自引用結構是實現其他一些結構的基礎。

自引用結構在動態資料結構中有重要作用,甚至可以說,自引用結構是 c/c++語言實現動態資料結構的基石。包括動態的鍊錶、堆、棧、樹,無不是自引用結構的具體實現。

例如,下面的定義就可以在實際操作中建立起乙個鍊錶。

struct nodepoint;

結構體指標中包含結構體指標

將c 轉化為c的過程中,一些c 的特性無法使用 類內私有變數在類內公共函式中使用,轉化為c的時候選擇用malloc的方式,申請一段記憶體空間去儲存它,在函式中傳指標形參去操作這些變數。這時候遇到乙個問題,結構體中包含了另乙個結構體的指標,這導致了我malloc的時候,另乙個結構體中的記憶體空間沒有申...

結構體指標

定義結構體 typedef struct str stu t 建立結構體指標,存放某乙個結構體變數的首位址 stu t p2stu null 重新命名結構體指標名 typedef將使得原來申明的結構體變數成為資料型別 typedef stu t p2stu t 建立結構體指標,存放某乙個結構體變數的...

結構體指標

指向結構體型別變數的使用 首先讓我們定義結構體 struct stu 再定義指向結構體型別變數的指標變數 struct stu p1,p2 定義指標變數p 1 p 2,分別指向結構體型別變數。引用形式為 指標變數 成員 例7 2 對指向結構體型別變數的正確使用。輸入乙個結構體型別變數的成員,並輸出。...