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

C語言字串常量、符號常量與變數初始化、型態轉換詳解

     編輯:關於C語言

字串常量 vs 字元常量

特性字元常量字串常量
括號符號單引號 ' '雙引號 " "
字元數量單一字元一或多個字元
指派對象字元變數字元陣列(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

語法:#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;。

變數型態轉換:自動 vs 強制

自動轉換(編譯器隱式執行)

發生於不同型態混合運算或指派運算時,遵循規則:

  1. 異型運算元先統一轉換為同一型態再運算
  2. 轉換方向:資料長度增加方向,保精度不降低(int → long、float → double)
  3. 所有浮點運算內部以 double 執行,float 先轉 double
  4. char、short 參與運算必先轉 int
  5. 指派時:右值型態轉為左值型態;右值長度大於左值時截斷高位,可能失精度

自動轉換實例


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(視精度保留)
}

關鍵總結

  1. 字串常量以 \0 結尾,佔 n+1 bytes;字元常量佔 1 byte
  2. #define 為前處理文字替換,非變數,值不可變
  3. 宣告初始化用逗號分隔,不可連續指派
  4. 自動轉換朝「長度增、精度不降」方向:整數→長整數、單精度→雙精度、char/short→int
  5. 指派轉換:右值轉左值型態,可能截斷損失精度
  6. 浮點運算內部皆以 double 進行
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved