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

C語言 if 條件判斷核心:if(t) 與 if(!t) 的本質區別

     編輯:C 語言問答

C語言真假值判斷機制深度解析

核心規則

C 語言中:0 為假,非 0 為真

if(t) vs if(!t) 對比

表達式t 的值條件結果執行分支等價寫法
if (t)t != 0真 (1)執行 if 體if (t != 0)
if (t)t == 0假 (0)跳過 if 體if (t != 0)
if (!t)t == 0真 (1)執行 if 體if (t == 0)
if (!t)t != 0假 (0)跳過 if 體if (t == 0)

邏輯非運算符 ! 詳解

// ! 運算符真值表
!0  = 1  // 非零變零
!非0 = 0  // 零變非零

// 實際應用
int flag = 1;
if (!flag)  // 等同於 if (flag == 0)
    printf("flag 為 0\n");

int count = 0;
if (!count)  // 等同於 if (count == 0)
    printf("count 歸零\n");

常見類型的真假判斷

類型假值真值示例注意事項
整數 (int, char, long...)01, -1, 100, 'A'負數也是真
浮點數 (float, double)0.00.1, -3.14, 1e-10極小非零也是真
指針NULL (0)有效地址if(ptr) 檢查非空
結構體不直接判斷-需比較具體成員

實戰代碼示例

#include <stdio.h>
#include <stdbool.h>  // C99 布爾類型

void check_value(int t) {
    printf("t = %d: ", t);
    if (t)
        printf("if(t) 執行  ");
    else
        printf("if(t) 跳過  ");
    
    if (!t)
        printf("if(!t) 執行\n");
    else
        printf("if(!t) 跳過\n");
}

int main() {
    check_value(0);     // 假
    check_value(1);     // 真
    check_value(-5);    // 真(非零即真)
    check_value(100);   // 真
    
    // 指針判斷慣用法
    int *ptr = NULL;
    if (!ptr)  // 等同於 if (ptr == NULL)
        printf("指針為空\n");
    
    ptr = malloc(100);
    if (ptr)   // 等同於 if (ptr != NULL)
        printf("內存分配成功\n");
    
    return 0;
}

最佳實踐建議

  1. 明確比較:if (t != 0) 比 if (t) 可讀性更好
  2. 指針檢查:習慣用 if (ptr) / if (!ptr),簡潔且符合慣例
  3. 浮點數比較:避免 if (f == 0.0),用 if (fabs(f) < EPS)
  4. 布爾變量:C99 起包含 <stdbool.h> 使用 bool、true、false

經典陷阱

// 陷阱1:賦值誤寫為比較
if (x = 5)  // 永遠為真!賦值表達式值為 5
    // 應為 if (x == 5)

// 陷阱2:浮點數精度
float f = 0.1f + 0.2f;
if (f == 0.3f)  // 可能為假!
    printf("相等\n");

// 陷阱3:字符串比較
char *s = "hello";
if (s == "hello")  // 比較地址而非內容!不一定真
    // 應用 strcmp(s, "hello") == 0
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved