
- 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 語言中的空指標是指不指向任何記憶體位置的指標。NULL 常量在標頭檔案 stdio.h、stddef.h 以及 stdlib.h 中定義。
將指標初始化為 NULL 可以避免程式出現不可預測的行為或防止分段錯誤。
宣告和初始化空指標
以下是宣告和初始化空指標的方法:
type *ptr = NULL;
或者,您也可以使用以下語法:
type *ptr = 0;
空指標示例
以下示例演示瞭如何宣告和初始化空指標:
#include <stdio.h> int main() { int *p= NULL;//initialize the pointer as null. printf("The value of pointer is %u",p); return 0; }
輸出
執行此程式碼時,將產生以下輸出:
The value of pointer is 0.
空指標的應用
以下是空指標的一些應用:
- 當指標變數尚未分配任何有效記憶體地址時,將其初始化為 指標 變數。
- 當我們不想傳遞任何有效記憶體地址時,將空指標傳遞給函式引數。
- 在訪問任何指標變數之前檢查空指標,以便在與指標相關的程式碼中執行錯誤處理。例如,僅當指標不為 NULL 時才解引用指標變數。
空指標始終用於檢測 樹、連結串列 和其他動態資料結構的端點。
檢查指標是否為空
在解引用指標以獲取其目標變數的值之前,始終建議檢查指標是否為空。
示例
請檢視以下示例:
#include <stdio.h> int main(){ int *ptr = NULL; // null pointer if (ptr == NULL) { printf("Pointer is a NULL pointer"); } else { printf("Value stored in the address referred by the pointer: %d", *ptr); } return 0; }
輸出
執行此程式碼時,將產生以下輸出:
Pointer is a NULL pointer
使用空指標檢查記憶體分配
malloc() 和 calloc() 函式用於動態分配記憶體塊。如果成功,這些函式將返回指向已分配塊的指標;如果失敗,則返回 NULL。
示例
以下示例顯示瞭如何使用空指標檢查記憶體分配是否成功:
#include <stdio.h> #include <stdlib.h> int main(){ int* ptr = (int*)malloc(sizeof(int)); if (ptr == NULL){ printf("Memory Allocation Failed"); exit(0); } else{ printf("Memory Allocated successfully"); } return 0; }
輸出
執行程式碼並檢查其輸出:
Memory Allocated successfully
空檔案指標
檢查 檔案指標 由 fopen() 函式 返回的指標是否為 NULL 始終是避免與檔案相關的處理中出現執行時錯誤的推薦方法。
示例
以下示例顯示瞭如何使用空檔案指標來確保檔案是否可訪問:
#include <stdio.h> #include <string.h> int main(){ FILE *fp; char *s; int i, a; float p; fp = fopen ("file3.txt", "r"); if (fp == NULL){ puts ("Cannot open file"); return 0; } while (fscanf(fp, "%d %f %s", &a, &p, s) != EOF) printf ("Name: %s Age: %d Percent: %f\n", s, a, p); fclose(fp); return 0; }
當目標變數尚未分配任何有效記憶體地址時,應始終將指標變數初始化為 NULL。
廣告