首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言常量與變量基礎:定義、初始化、類型與轉義字符詳解

     編輯:關於C

常量與變量是C語言程序操作數據的兩種基本形式。本文詳細講解變量定義初始化、常量分類與表示、符號常量定義、轉義字符機制,夯實C語言數據操作基礎。

變量

定義與特性

  • 變量:程序運行過程中值可變化的量,本質是內存區域的別名
  • 每個變量具有:名稱(標識符)、類型、值、地址、作用域、生存期

定義語法


類型說明符 變量名1 [= 初值], 變量名2 [= 初值], ... ;

示例:


int a = 10, b = 20;
double pi = 3.14159;
char grade = 'A';

初始化規則

  • 局部變量(自動存儲期):不初始化則值不定(垃圾值),必須顯式初始化
  • 靜態/全局變量:隱式初始化為0(整數0、浮點0.0、空指針NULL、字符\0)
  • 數組/結構體:int arr[5] = {1,2};剩餘元素自動補0

命名規範

  • 字母、數字、下劃線,首字符非數字
  • 區分大小寫(count ≠ Count)
  • 避免與關鍵字、標準庫函數名衝突
  • 推薦:小寫蛇形(user_count)、常量全大寫(MAX_SIZE)

常量

常量:程序運行過程中值不變的量。

五大類常量

類型示例說明
整型常量123, -456, 0177(八進制), 0x7B(十六進制)十進制無前綴,八進制以0開頭,十六進制以0x/0X開頭
實型常量3.14, -0.5, 1.2e3(科學記數法=1200), 5E-2(=0.05)默認double類型,浮點字面量含小數點或指數部分
字符常量'A', '\n', '\x41', '\101'單引號括起,值為ASCII碼。注意:'A'(字符,1字節) ≠ "A"(字符串,2字節含\0)
字符串常量"Hello", "C\n語言", ""(空串)雙引號括起,編譯器自動在末尾添加\0,類型為const char[]
符號常量#define PI 3.14159預處理宏定義,編譯前文本替換,無類型檢查,不佔運行時內存

轉義字符

以反斜杠\開頭,表示特殊控制字符或不可打印字符:

轉義序列含義ASCII碼
\n換行10 (0x0A)
\t水平制表符9 (0x09)
\r回車13 (0x0D)
\b退格8 (0x08)
\f換頁12 (0x0C)
\v垂直制表符11 (0x0B)
\\反斜杠本身92 (0x5C)
\'單引號39 (0x27)
\"雙引號34 (0x22)
\0空字符0 (0x00)
\ddd1-3位八進制如\101 = 'A'
\xhh1-2位十六進制如\x41 = 'A'

字符常量 vs 字符串常量 核心區別


char c = 'A';      // 類型 char,值 65,佔1字節
char *s = "A";     // 類型 char*,指向只讀內存區,含'A','\0',佔2字節
sizeof('A') == 1   // C++中為1,C中為int大小(通常4) —— 歷史遺留差異
sizeof("A") == 2   // 數組大小,含\0

符號常量定義 #define


#define MAX_BUFFER 1024
#define PI 3.141592653589793
#define GREETING "Hello, World!"
#define SQUARE(x) ((x)*(x))  // 函數式宏,參數加括號防優先級錯誤
  • 預處理階段純文本替換,無類型檢查、無作用域(全局可見)
  • 慣例:全大寫+下劃線區分
  • 現代C++優先用constexpr/const替代,有類型安全、作用域、調試可見性

const 修飾符(C90引入,現代首選)


const int MAX = 100;        // 唯讀變量,有類型、有作用域
const double PI = 3.14159;
const char *MSG = "Hello";  // 指向常量字符串
// MAX = 200; // 編譯錯誤:賦值唯讀變量
  • 替代#define的優先選擇:類型安全、編譯器優化友好、調試器可見
  • 指針與const組合:const int* p(指向常量)、int* const p(常量指針)、const int* const p(雙重常量)

枚舉常量 enum


enum Color { RED, GREEN, BLUE };  // RED=0, GREEN=1, BLUE=2
enum Status { OK=1, ERR=-1 };     // 可指定值
enum Week { MON=1, TUE, WED };    // 遞增
  • 枚舉常量本質是int類型編譯期常量
  • 提供分組、自動編號、類型語義(雖然底層仍是int)
  • C++11enum class提供強類型枚舉,防止隱式轉換

最佳實踐總結

場景推薦方式理由
編譯期常數值constexpr (C++11) / const類型安全、作用域、調試可見
相關常數組enum / enum class語義分組、自動編號
平台相關配置#define (配合編譯選項)條件編譯、命令行覆蓋
字符串字面量const char* / std::string_view避免數組退化、生命周期清晰

理解常量與變量的存儲、類型、作用域、生命周期差異,正確選擇定義方式,是編寫健壯、可維護C代碼的起點。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved