
- C 程式設計教程
- C - 首頁
- C語言基礎
- C - 概述
- C - 特性
- C - 歷史
- C - 環境設定
- C - 程式結構
- C - Hello World
- C - 編譯過程
- C - 註釋
- C - 詞法單元
- C - 關鍵字
- C - 識別符號
- C - 使用者輸入
- C - 基本語法
- C - 資料型別
- C - 變數
- C - 整數提升
- C - 型別轉換
- C - 型別強制轉換
- C - 布林值
- C語言中的常量和字面量
- C - 常量
- C - 字面量
- C - 轉義序列
- C - 格式說明符
- C語言中的運算子
- C - 運算子
- C - 算術運算子
- C - 關係運算符
- C - 邏輯運算子
- C - 位運算子
- C - 賦值運算子
- C - 一元運算子
- C - 自增和自減運算子
- C - 三元運算子
- C - sizeof 運算子
- C - 運算子優先順序
- C - 其他運算子
- C語言中的決策
- C - 決策
- C - if 語句
- C - if...else 語句
- C - 巢狀 if 語句
- C - switch 語句
- C - 巢狀 switch 語句
- C語言中的迴圈
- C - 迴圈
- C - while 迴圈
- C - for 迴圈
- C - do...while 迴圈
- C - 巢狀迴圈
- C - 無限迴圈
- C - break 語句
- C - continue 語句
- C - goto 語句
- C語言中的函式
- C - 函式
- C - 主函式
- C - 按值呼叫函式
- C - 按引用呼叫函式
- C - 巢狀函式
- C - 可變引數函式
- C - 使用者定義函式
- C - 回撥函式
- C - 返回語句
- C - 遞迴
- C語言中的作用域規則
- C - 作用域規則
- C - 靜態變數
- C - 全域性變數
- C語言中的陣列
- C - 陣列
- C - 陣列的特性
- C - 多維陣列
- C - 將陣列傳遞給函式
- C - 從函式返回陣列
- C - 可變長陣列
- C語言中的指標
- C - 指標
- C - 指標和陣列
- C - 指標的應用
- C - 指標運算
- C - 指標陣列
- C - 指標到指標
- C - 將指標傳遞給函式
- C - 從函式返回指標
- C - 函式指標
- C - 指向陣列的指標
- C - 指向結構體的指標
- C - 指標鏈
- C - 指標與陣列
- C - 字元指標和函式
- C - 空指標
- C - void 指標
- C - 懸空指標
- C - 解引用指標
- C - 近、遠和巨型指標
- C - 指標陣列的初始化
- C - 指標與多維陣列
- C語言中的字串
- C - 字串
- C - 字串陣列
- C - 特殊字元
- C語言中的結構體和聯合體
- C - 結構體
- C - 結構體和函式
- C - 結構體陣列
- C - 自引用結構體
- C - 查詢表
- C - 點 (.) 運算子
- C - 列舉 (或 enum)
- C - 結構體填充和打包
- C - 巢狀結構體
- C - 匿名結構體和聯合體
- C - 聯合體
- C - 位域
- C - Typedef
- C語言中的檔案處理
- C - 輸入 & 輸出
- C - 檔案 I/O (檔案處理)
- C 預處理器
- C - 預處理器
- C - 指令
- C - 預處理器運算子
- C - 宏
- C - 標頭檔案
- C語言中的記憶體管理
- C - 記憶體管理
- C - 記憶體地址
- C - 儲存類
- 其他主題
- C - 錯誤處理
- C - 可變引數
- C - 命令執行
- C - 數學函式
- C - static 關鍵字
- C - 隨機數生成
- C - 命令列引數
- C 程式設計資源
- C - 問題 & 答案
- C - 快速指南
- C - 速查表
- C - 有用資源
- C - 討論
C語言中的結構體指標
如果使用關鍵字struct定義了一個派生資料型別,則可以宣告此型別的變數。因此,您還可以宣告一個指標變數來儲存其地址。指向結構體的指標因此是一個引用結構體變數的變數。
語法:定義和宣告結構體
以下是如何使用“struct”關鍵字定義新的派生資料型別:
struct type { type var1; type var2; type var3; ... ... };
然後可以宣告此派生資料型別的變數,如下所示:
struct type var;
然後可以宣告一個指標變數並存儲var的地址。要將變數宣告為指標,必須以“*”為字首;要獲取變數的地址,我們使用“&”運算子。
struct type *ptr = &var;
訪問結構體的元素
要使用指標訪問結構體的元素,我們使用一個稱為間接運算子 (→) 的特殊運算子。
在這裡,我們定義了一個名為book的使用者定義的 struct 型別。我們聲明瞭一個book變數和一個指標。
struct book{ char title[10]; double price; int pages; }; struct book b1 = {"Learn C", 675.50, 325}, struct book *strptr;
要儲存地址,請使用&運算子。
strptr = &b1;
使用間接運算子
在 C 程式設計中,我們對 struct 指標使用間接運算子 (“→”)。它也稱為“struct 解引用運算子”。它有助於訪問 struct 指標引用的 struct 變數的元素。
要訪問 struct 中的單個元素,間接運算子的使用方法如下:
strptr -> title; strptr -> price; strptr -> pages;
struct 指標使用間接運算子或解引用運算子來獲取 struct 變數的 struct 元素的值。點運算子 (“.”) 用於根據 struct 變數獲取值。因此,
b1.title is the same as strpr -> title b1.price is the same as strptr -> price b1.pages is the same as strptr -> pages
示例:指向結構體的指標
以下程式顯示了指向結構體的指標的用法。在此示例中,“strptr”是指向變數“struct book b1”的指標。因此,“strrptr → title”返回標題,類似於“b1.title”的作用。
#include <stdio.h> #include <string.h> struct book{ char title[10]; double price; int pages; }; int main(){ struct book b1 = {"Learn C", 675.50, 325}; struct book *strptr; strptr = &b1; printf("Title: %s\n", strptr -> title); printf("Price: %lf\n", strptr -> price); printf("No of Pages: %d\n", strptr -> pages); return 0; }
輸出
Title: Learn C Price: 675.500000 No of Pages: 325
注意事項
- 點運算子 (.) 用於透過 struct 變數訪問 struct 元素。
- 要透過其指標訪問元素,必須使用間接運算子 (→)。
示例
讓我們考慮另一個示例來了解指向結構體的指標是如何工作的。在這裡,我們將使用關鍵字struct定義一個名為person的新派生資料型別,然後我們將宣告其型別的變數和一個指標。
系統提示使用者輸入該人的姓名、年齡和體重。透過使用間接運算子訪問結構體元素,將值儲存在結構體元素中。
#include <stdio.h> #include <string.h> struct person{ char *name; int age; float weight; }; int main(){ struct person *personPtr, person1; strcpy(person1.name, "Meena"); person1.age = 40; person1.weight = 60; personPtr = &person1; printf("Displaying the Data: \n"); printf("Name: %s\n", personPtr -> name); printf("Age: %d\n", personPtr -> age); printf("Weight: %f", personPtr -> weight); return 0; }
輸出
執行此程式時,將產生以下輸出:
Displaying the Data: Name: Meena Age: 40 weight: 60.000000
C 允許您宣告“struct 陣列”以及“指標陣列”。在這裡,struct 指標陣列中的每個元素都是對 struct 變數的引用。
struct 變數類似於基本型別的普通變數,因為您可以擁有 struct 陣列,可以將 struct 變數傳遞給函式,以及從函式返回 struct。
注意:在宣告時,需要在變數或指標名稱前加上“struct 型別”。但是,可以透過使用typedef關鍵字建立簡寫表示法來避免這種情況。
為什麼需要指向結構體的指標?
指向結構體的指標非常重要,因為您可以使用它們來建立複雜的動態資料結構,例如連結列表、樹、圖等。此類資料結構使用自引用 struct,其中我們定義一個 struct 型別,其中一個元素是指向同一型別的指標。
具有指向其自身型別元素的指標的自引用結構體的示例定義如下:
struct mystruct{ int a; struct mystruct *b; };
我們將在下一章學習自引用結構體。