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

C語言常量與變量基礎:符號常量、變量定義初始化與作用域規範

     編輯:關於C語言

常量與變量是 C 程序操作數據的兩大核心實體。本文系統講解常量分類(字面常量/符號常量)、#define 宏定義機制、變量定義語法、初始化規則、命名規範與作用域基礎,幫助初學者建立規範的數據管理觀念。

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

字面常量

直接出現在代碼中的固定值:100、3.14、'A'、"hello"。類型由書寫形式決定(後綴可調整)。

符號常量

用標識符代表常量值,通過預處理指令 #define 定義:

#define PRICE 30
#define PI 3.14159265358979323846
  • 機制:預處理階段**文本替換**,非編譯器處理;無類型檢查,無作用域限制(全局生效)。
  • 命名慣例:全大寫(MAX_SIZE),與變量小寫區分。
  • 優勢:語義清晰(PRICE 勝過 30);**一處修改、全局生效**,利於維護。
  • 限制:不可重新賦值;非變量,無地址,不可取址 &PRICE。

範例:符號常量應用

#include <stdio.h>
#define PRICE 30
int main() {
    int num = 10;
    int total = num * PRICE;  // 預處理展開為 num * 30
    printf("total=%d\n", total);  // 300
    return 0;
}

變量:可變數據的命名存儲

定義語法

類型說明符  變量名1, 變量名2, ... ;
  • 同類型多變量用逗號分隔,以分號結尾。
  • 定義必須在**使用之前**,習慣置於函數體開頭(C89 強制,C99 允許混合)。
  • 變量名 ≠ 變量值;名字是標識符,值存儲在內存單元。

初始化(定義時賦值)

int a = 3;
int b, c = 5;           // b 未初始化,值不確定
float x = 3.2, y = 3.0, z = 0.75;
char ch1 = 'K', ch2 = 'P';
  • 定義中不可連續賦值:int a = b = c = 5; **非法**(C 語法不支持)。
  • 未初始化的局部變量值**不確定**(垃圾值),全局/靜態變量自動初始化為 0。

範例:變量定義與初始化

#include <stdio.h>
int main(void) {
    int a = 3, b, c = 5;
    b = a + c;          // 賦值語句,非初始化
    printf("a=%d, b=%d, c=%d\n", a, b, c);  // 3, 8, 5
    return 0;
}

常量 vs 變量:核心差異速查

特性符號常量 (#define)變量
值可變性不可變(編譯期確定)可變(運行期修改)
存儲無內存單元,文本替換佔用內存單元
類型檢查無編譯器強類型檢查
作用域定義處至文件結尾塊作用域/文件作用域
可取址否是 (&var)
調試可見性不可見(預處理展開)可見(符號表)

現代 C 最佳實踐建議

  • 優先用 const 變量替代 #define:const double PI = 3.14159; 具有類型、作用域、可調試、可取址,編譯器優化同樣優秀。
  • 枚舉常量(enum { RED, GREEN, BLUE };)替代整數宏,類型安全且調試友好。
  • 變量**就近定義、立即初始化**,減少未初始化 Bug。
  • 命名:變量小寫下劃線(max_count),常量全大寫(MAX_COUNT),宏全大寫(SQUARE(x))。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved