
- 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語言 - 空指標
- 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語言中的空指標
C語言中的空指標
C語言中的空指標是一種不與任何資料型別關聯的指標型別。空指標可以儲存任何型別的地址,並且可以強制轉換為任何型別。它們也被稱為通用指標或泛型指標。
在C程式設計中,函式malloc()和calloc()返回"void *"或通用指標。
宣告空指標
這是宣告空指標的語法:
void *ptr;
空指標示例
以下示例顯示瞭如何在C程式中使用空指標:
#include <stdio.h> int main(){ int a = 10; char b = 'x'; // void pointer holds address of int a void *ptr = &a; printf("Address of 'a': %d", &a); printf("\nVoid pointer points to: %d", ptr); // it now points to char b ptr = &b; printf("\nAddress of 'b': %d", &b); printf("\nVoid pointer points to: %d", ptr); }
輸出
執行程式碼並檢查其輸出:
Address of 'a': 853377452 Void pointer points to: 853377452 Address of 'b': 853377451 Void pointer points to: 853377451
空指標陣列
我們可以宣告一個陣列的空指標,並存儲指向不同資料型別的指標。
空指標是一個可以在C語言中儲存任何資料型別記憶體地址的指標。因此,空指標陣列是一個可以儲存記憶體地址的陣列,但這些地址可以指向不同資料型別的變數。
您還可以將指標儲存到任何使用者定義的資料型別(例如陣列和結構體)中。
示例
在這個示例程式中,我們聲明瞭一個空指標陣列,並在其中儲存了指向不同型別變數(int、float和char*)的指標。
#include <stdio.h> int main(){ void *arr[3]; int a = 100; float b = 20.5; char *c = "Hello"; arr[0] = &a; arr[1] = &b; arr[2] = &c; printf("Integer: %d\n", *((int *)arr[0])); printf("Float: %f\n", *((float *)arr[1])); printf("String: %s\n", *((char **)arr[2])); return 0; }
輸出
執行此程式碼後,將產生以下輸出:
Integer: 100 Float: 20.500000 String: Hello
空指標的應用
下面列出了一些空指標的常見應用:
-
malloc()函式作為庫函式在標頭檔案stdlib.h中可用。它在程式執行時動態分配一塊記憶體。正常的變數宣告會導致記憶體分配在編譯時進行。
void *malloc(size_t size);
空指標用於實現泛型函式。動態分配函式malloc()和calloc()返回"void *"型別,此特性允許這些函式用於分配任何資料型別的記憶體。
空指標的侷限性
空指標具有以下侷限性:
廣告