在介紹完結構(Struct)之後,一樣我們可以運用動態記憶體配置的方式來配置結構,這時候就需要結構指標來作為媒介。當然,結構指標也能直接指向已經配置好的結構(靜態或動態配置的結構)。
大家應該都還記得指標的用途為何,而結構指標的用途就是我們可以存取某個在記憶體位址的結構內的資料,讓程式可以很好地連續運用和處理記憶體中的資料。
結構指標還有一種常見的組成結構是可以將相關聯的結構彼此串聯在一起,以便存取修改,它的概念在整個程式內就像是一串可靈活變動且共享的記憶體(注意不是連續的記憶體),凡是任何可以拿到這個起始位址指標的地方,都可以去修改內部的資料,常見的結構就是鏈結串列(Linked List)、環(Circle)、二元樹(Binary Tree)等等,後續篇章會再詳細說明。
結構指標指向靜態配置結構的方式和指標(Pointer)說明的一樣,只需要將配置好的結構"取址"即可:
struct node {
int val;
node* next;
} node1 = {10, nullptr};
int main () {
struct node* ptr = &node1;
std::cout << ptr->val << std::endl;
return 0;
}
值得注意的是,當指標指向結構或類別(class)時,我們要存取其成員的值就需要用 "->" 來標示,而不是用 "." 來標示,這個在初學 C 語言時很多人會搞不清楚這個重點。
動態配置的方式和動態記憶體配置提到的方法一樣,只要將 malloc 或 calloc 回傳的指標轉換成對應的結構即可,如下:
int main()
{
struct node* ptr = (node*)malloc(sizeof(node));
if (ptr == nullptr) {
cout << "Memory Allocation Failed!" << endl;
return -1;
}
ptr->val = 100;
cout << ptr->val << endl;
return 0;
}
下一篇: 第二十一課 - 鏈結串列(Linked List)
Last updated: