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

C語言賦值運算符完全指南:基本、復合與類型轉換規則

     編輯:關於C語言

賦值運算符(=)是 C 語言中最基礎也最常用的運算符之一。它將右側表達式的值計算後存入左側變量,形成「賦值表達式」,其值即為賦值後左側變量的值。得益於右結合性,a = b = c = 5 等價於 a = (b = (c = 5)),依次將 5 賦予 c、b、a。

賦值表達式的獨特地位

與其他高級語言將賦值視為「語句」不同,C 語言將 = 定義為運算符,使得賦值表達式可出現在任何表達式合法的位置。例如:

x = (a = 5) + (b = 8);  // 合法:先賦值 a=5, b=8,再相加得 13 賦予 x

若在表達式後加分號,即構成「賦值語句」(如 x = 8;),這是日常編程的主流形式。

類型轉換規則(隱式轉換)

當賦值號兩側數據類型不同時,編譯器自動將右側值轉換為左側類型,遵循以下規則:

右側類型左側類型轉換行為
浮點型整型捨去小數部分(截斷,非四捨五入)
整型浮點型數值不變,以浮點形式存儲(補 .0)
字符型整型將 ASCII 碼存入整型低位,高位補 0
整型字符型僅保留低 8 位

實戰範例(修正版)

#include <stdio.h>
int main(void) {
    int a, c, b = 322;
    float x, y = 8.88;
    char c1 = 'k', c2;
    a = y;      // float → int:a = 8
    x = b;      // int → float:x = 322.000000
    c = c1;     // char → int:c = 107 ('k' 的 ASCII)
    c2 = b;     // int → char:取低 8 位 0x42 → 'B'
    printf("a=%d, x=%f, c=%d, c2=%c\n", a, x, c, c2);
    // 輸出:a=8, x=322.000000, c=107, c2=B
    return 0;
}

復合賦值運算符

將二元算術/位運算符與 = 結合,形成 +=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=。其語義等價於:

變量 op= 表達式   ⇔   變量 = 變量 op (表達式)

注意:x *= y + 7 等價於 x = x * (y + 7),而非 x = x * y + 7。復合賦值不僅簡潔,亦有助於編譯器生成更高效的目標代碼。

避坑指南

  • 窄化轉換(如 double → int、long → char)可能導致數據丟失,編譯器通常給出警告,需顯式轉型確認意圖。
  • a = b = c = 5 僅適用於類型相容的變量鏈;類型不同時,中間轉換可能產生非預期結果。
  • 復合賦值運算符僅求值左側變量一次,對含副作用的左值(如 arr[i++] += 1)行為與展開形式不同。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved