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

C語言常量與變量全解析:字面量、標識符、存儲、ASCII碼表

     編輯:關於C語言

C語言常量與變量全解析:字面量、標識符、存儲、ASCII碼表

常量與變量是程序操作數據的兩大基石。本文系統梳理常量分類(整型、實型、符號、字符/字符串)、C標識符規則、變量三要素(名、類型、值)、整型/實型/字符型變量細節、溢出與誤差、ASCII碼表。

一、常量

1. 整型常量

進制前綴數字組成示例
十進制無0-9,首位非0123, -456
八進制00-70173 (十進制123)
十六進制0x/0X0-9, a-f/A-F0x7B (十進制123)
  • 後綴:L/l (long),U/u (unsigned),LL/ll (long long)。
  • 無符號常量參與運算觸發隱式轉換陷阱(如 -1U > 0 為真)。

2. 實型常量 (浮點常量)

  • 十進制小數形式:3.14, .5, 10.(必須有小數點)。
  • 指數形式:1.2e3 (1200), 5E-2 (0.05)。e/E 前必有數字,後必為整數。
  • 默認類型為 double。後綴 f/F 指定 float,l/L 指定 long double。

3. 符號常量


#define PI 3.1415926
#define MAX_SIZE 1024
#define GREETING "Hello"
  • 預處理階段文本替換,**無類型、無作用域、不佔內存**。
  • 慣例:全大寫命名,與變量區分。
  • 優於 const 的編譯期常量表達式場景(如數組長度、switch case、位域寬度)。

4. 字符型常量

轉義字符
類型語法存儲示例
字符常量單引號 'a'1字節,ASCII碼值'A' (65), '\n' (10)
字符串常量雙引號 "abc"字符數組+\0結尾,存常量區"A" 佔2字節('A','\0')

二、C語言標識符

  • 組成:字母(A-Z,a-z)、數字(0-9)、下劃線_。
  • 首字符**不能是數字**。
  • **區分大小寫**。
  • 不能使用關鍵字(if, for, while, int, return...)。
  • 長度:C89限31字符(外部)/63字符(內部);C99+通常無實際限制(編譯器實現定義)。
  • 命名規範:見名知意(length, sum, pi, user_count),變量小寫,符號常量大寫,宏常全大寫。
  • 三類:關鍵字、預定義標識符(printf, malloc, errno...)、用戶自定義標識符。

三、變量

變量具備三要素:**名、類型、值**。遵循「先定義後使用」。

1. 變量類型與存儲

整型變量
轉義含義ASCII
\n換行10
\t水平製表9
\\反斜線92
\'單引號39
\"雙引號34
\0空字符(字符串結束)0
\xHH十六進制ASCII\x41='A'
\OOO八進制ASCII\101='A'
類型說明典型大小範圍(有符號)
short/short int短整型2字節-32,768 ~ 32,767
int/signed int基本整型4字節(32/64位)-2,147,483,648 ~ 2,147,483,647
long/long int長整型4/8字節同int或更大
long long長長整型8字節-9e18 ~ 9e18
  • 內存中以**補碼**二進制存儲。
  • 溢出:有符號溢出是未定義行為;無符號溢出模2N環繞。
實型變量
  • 存儲:IEEE 754 格式(符號位+指數位+尾數位)。
  • 捨入誤差:0.1 無法精確表示,**絕不直接用 == 比較**,用 fabs(a-b) < EPS。
  • printf 傳遞 float 自動提升為 double,%f 通用;scanf 必須區分 %f(float*) / %lf(double*)。
字符型變量
類型大小範圍有效位數格式
float4字節±3.4e386~7%f/%e/%g
double8字節±1.7e30815~16%lf/%le/%lg
long double10/16字節±1.1e493218~19%Lf/%Le/%Lg
類型大小範圍
signed char1字節-128 ~ 127
unsigned char1字節0 ~ 255
char1字節實現定義有符號/無符號
  • char 用於存字符時用 %c,作為小整數用 %d/%hhd。
  • 字符字面量 'a' 類型為 int (C語言歷史遺留),賦值給 char 隱式截斷。

2. 變量賦值與初始化

  • 賦值語句:a = 10;
  • 初始化:int a = 10; (定義時賦值)。
  • 輸入:scanf("%d", &a);。
  • 未初始化局部變量值不定(棧垃圾),全局/靜態變量默認0。

四、附錄:ASCII碼表(關鍵部分)

十進制十六進制字符說明
00x00NUL空字符/字符串結束
90x09HT水平製表 \t
100x0ALF換行 \n
130x0DCR回車 \r
320x20SP空格
48-570x30-0x390-9數字字符
65-900x41-0x5AA-Z大寫字母
97-1220x61-0x7Aa-z小寫字母
1270x7FDEL刪除

五、關鍵總結

  1. 常量是值,變量是存儲值的盒子(有地址、類型、名字)。
  2. #define 是預處理替換,const 是只讀變量(有類型、作用域、地址)。
  3. 整型補碼、浮點IEEE 754、字符ASCII — 理解底層位模式是避坑關鍵。
  4. sizeof 在編譯期計算類型/表達式大小,**不計算變量值**。
  5. 標識符命名:有意義、規範風格、避開保留字(雙下劃線開頭、下劃線+大寫開頭保留給實現)。

常量與變量看似基礎,實則蘊含C語言類型系統、存儲模型、預處理機制的核心邏輯。徹底搞清它們的「是什麼、怎麼存、怎麼用、易犯錯」,是寫出正確、可移植、無Bug C代碼的基石。

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