
- 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 - 常量
在 C 語言中,常量是指分配給記憶體中某個位置的使用者自定義名稱,其值一旦聲明後便無法修改。這與 C 語言中的變數形成對比,變數也是一個命名記憶體位置,但其值在程式碼執行過程中可以更改。
建議在程式中定義一個常量並使用它,而不是重複使用硬編碼值。C 程式中的常量通常用於引用一個值,如果該值在程式中重複使用,則可能容易出錯,同時其值不太可能發生變化。
例如,數學常數 PI 的值為一個高精度浮點數 3.14159265359,如果它可能頻繁出現,則將其宣告為常量並使用其名稱。
我們可以將 C 語言中的常量視為只讀變數,因為它的值只能隨後使用,而不能修改。
您可以透過以下兩種方式之一在 C 程式中宣告常量:
使用 const 關鍵字
使用 #define 指令
讓我們瞭解一下在 C 語言中宣告常量的這兩種方法。
使用 const 關鍵字定義常量
宣告常量的語法如下:
const type NAME = val;
例如:
const float PI = 3.14159265359;
現在,我們可以在任何表示式中使用 PI,就像使用任何變數一樣。
示例
請看下面的示例:
#include <stdio.h> int main(){ const float PI = 3.14159265359; float radius = 5; float area = PI*radius*radius; printf ("area: %f", area); return 0; }
輸出
執行此程式碼後,您將獲得以下輸出:
area: 78.539818
但是,禁止更改常量的值。以下語句會導致編譯器錯誤:
const float PI = 3.14159265359; PI=22/7;
在這裡,您將收到以下錯誤訊息:
error: assignment of read-only variable 'PI'
對於 變數,您可以宣告一個變數並在程式後面的某個位置為其賦值,但是對於常量,您不能使用相同的流程。
您可以在 C 語言中宣告一個常量而不為其賦值。但是,當您嘗試在之後為其賦值時,編譯器會丟擲錯誤。
const float PI; PI = 3.14159265359;
在這裡,您將收到此錯誤訊息:
error: assignment of read-only variable 'PI'
注意:“sizeof” 返回 “size_t”。“size_t” 的無符號整數型別可能會因平臺而異。並且,它可能並非在所有地方都是 long unsigned int。在這種情況下,我們使用“%zu” 作為格式字串而不是“%d”。
這是因為 編譯器 在宣告時分配了一個隨機的垃圾值,您之後無法更改該值。因此,您必須同時宣告和初始化常量。
C 語言中的常量可以是任何 資料型別,包括基本資料型別(如 int、float、char)和派生資料型別(如 struct)。
使用 #define 指令定義常量
使用#define 預處理器指令 也是定義常量的一種有效方法。以下是其語法:
#define name = value
請看下面的示例
#define PI = 3.14159265359
儘管如此定義的常量也可以在任何表示式中使用(就像使用 const 關鍵字定義的常量一樣),但兩者之間存在差異。
由#define 指令建立的常量不由編譯器處理。相反,它們的行為類似於宏,其值在執行時被替換。
另一個值得注意的差異是,使用#define 指令時,您無需提及要分配給常量的值的型別。
示例:使用 #define 定義常量
下面是另一個使用 #define 指令定義常量的示例:
#include <stdio.h> #define LENGTH 10 #define WIDTH 5 #define NEWLINE '\n' int main() { int area; area = LENGTH * WIDTH; printf("length: %d width: %d", LENGTH, WIDTH); printf("%c", NEWLINE); printf("value of area : %d", area); return 0; }
輸出
執行此程式碼後,您將獲得以下輸出:
length: 10 width: 5 value of area : 50
由於常量也是 C 語言中的 識別符號,因此它遵循形成識別符號的所有規則。C 語言中的識別符號區分大小寫。因此,在 C 語言中定義常量時遵循的約定是使用大寫字元,但這並非強制性。
更改常量的值
根據定義,常量是不可變的。為什麼要在首先更改常量的值?我們使用常量是為了保持其值不變。為了能夠更改值,我們將定義一個變數而不是常量。
我們已經看到,無法為已定義的常量分配新值。但是,存在一種變通方法,可以透過該方法為常量分配新值。
該技術利用了 C 語言中指標 的概念。指標是一個儲存另一個變數地址的變數。由於它是一個變數,因此可以更改其值。此外,此更改會反映在原始變數中。
示例:更改常量的值
以下程式碼演示瞭如何使用指標機制更改常量的值:
#include <stdio.h> int main(){ const int x = 10; printf("Initial Value of Constant: %d\n", x); // y is a pointer to constant x int* y = &x; // assign new value *y = 100; printf("Value of Constant after change: %d", x); return 0; }
輸出
執行此程式碼後,您將獲得以下輸出:
Initial Value of Constant: 10 Value of Constant after change: 100
請注意,此技術僅適用於使用const限定符定義的常量。
如果您使用#define 指令定義了常量,則無法應用此過程。這是因為指標具有資料型別,並且必須與要儲存其地址的型別相同。另一方面,使用#define 指令定義的常量實際上沒有資料型別。它實際上是一個在執行時被替換的宏。