| 特性 | 字元常量 | 字串常量 |
|---|---|---|
| 括號符號 | 單引號 ' ' | 雙引號 " " |
| 字元數量 | 單一字元 | 一或多個字元 |
| 指派對象 | 字元變數 | 字元陣列(C 無字串變數型態) |
| 記憶體佔用 | 1 位元組 | 字元數 + 1(結束符 \0) |
// 字元常量 'a'
記憶體:[ 'a' ] → 1 byte
// 字串常量 "a"
記憶體:[ 'a' ][ '\0' ] → 2 bytes
// 字串常量 "C program"
記憶體:[ 'C' ][ ' ' ][ 'p' ][ 'r' ][ 'o' ][ 'g' ][ 'r' ][ 'a' ][ 'm' ][ '\0' ] → 10 bytes
\0(ASCII 0)為字串結束標誌,標準庫函數(strlen、printf、strcpy 等)依此判斷字串結尾。
語法:#define 識別符 常量
本質:前處理器巨集替換,編譯前以常量值取代所有識別符出現處。
慣例:識別符全大寫(如 PI),變數用小寫,易區分。
#define PI 3.14159
void main() {
float s, r;
r = 5;
s = PI * r * r; // 展開為 s = 3.14159 * r * r
printf("s=%f\n", s);
}
特性:非變數,作用域內值不可改變,不可指派新值。
宣告時指定初值:型態 變數1=值1, 變數2=值2, ...;
int a = 3, b, c = 5; // a=3, c=5, b 未初始化(區域變數值不定)
float x = 3.2, y = 3.0, z = 0.75;
char ch1 = 'K', ch2 = 'P';
注意:宣告中不允許連續指派int a=b=c=5(語法錯誤),必須寫成int a=5,b=5,c=5;。
發生於不同型態混合運算或指派運算時,遵循規則:
char、short 參與運算必先轉 int
int i = 10;
float f = 3.14;
double d = i + f; // i→float→double,f→double,相加得 double 結果
char c = 'A'; // ASCII 65
int sum = c + i; // c→int (65),sum = 75
double d = 3.1415926535;
float f = d; // double→float,保留約 7 位有效數字
int i = f; // float→int,截斷小數,i = 3
void main() {
int a = 32;
float b;
double d;
b = 12345678; // int→float,超出 float 精度(7 位),低位失真
d = b * 100; // float→double 運算
d = d + a; // int→double 運算
d = d + 58.123456; // double 運算
// 最終 d 約為 1234567890.123456(視精度保留)
}
\0 結尾,佔 n+1 bytes;字元常量佔 1 byte#define 為前處理文字替換,非變數,值不可變