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

C 語言學習筆記 (二):類型轉換、運算符陷阱、內存管理與技巧

     編輯:關於C語言

隱式類型轉換規則

  1. 整型提升:char、short 自動轉為 int 參與運算
  2. 浮點提升:float 自動轉為 double
  3. usual arithmetic conversions:雙操作數轉為同一類型,優先級:long double > double > float > unsigned long > long > unsigned > int

示例:int a = 3.2 + 3 / 4.0; → 3/4.0=0.75 (double) → 3.2+0.75=3.95 → 賦值給 int 截斷為 3。

四種隱式轉換場景

  • 運算轉換:混合類型運算
  • 賦值轉換:右值轉為左值類型
  • 輸出轉換:printf 格式化
  • 函數調用:實參轉為形參類型

強制類型轉換

double x = 3.4;
(int)x; // 生成臨時 int 值 3,x 本身不變
// 內存:x 佔 8 字節,常量 3.4 佔 8 字節,臨時 int 佔 4 字節

後置 ++/-- 陷阱

int a[10], *p = a, m;
m = *p++; // 等價 m = *(p++); 先取值 *p,再 p++
// 結合順序:後置 ++ 與 * 同優先級,右結合

賦值運算符特性

b = a = 2; // 右結合:先 a=2 (結果 2),再 b=2
// 10 是 int 常量 (C99 前為 int,非 short),賦值時無轉換

逗號運算符

expr1, expr2 值為 expr2 的值,順序點保證先求 expr1。

main 返回值

正常返回 0,異常返回非零 (POSIX 約定)。

I/O 緩衝機制

  • 行緩衝 (stdout 連終端):遇 \n 刷新
  • 全緩衝 (文件/管道):滿時刷新
  • fclose、fflush、程序正常退出觸發刷新
  • 程序崩潰 (abort/SIGKILL) 緩衝區數據丟失

無臨時變量交換兩數

// 加減法 (可能溢出)
a = a + b; b = a - b; a = a - b;

// 異或法 (推薦,無溢出風險)
a ^= b; b ^= a; a ^= b; // 原理:x^x=0, x^0=x

scanf 指針陷阱

int *p; scanf("%d", p); // 錯誤:p 未初始化,野指針
// 正確:
int x; scanf("%d", &x);
// 或
int *p = malloc(sizeof(int)); scanf("%d", p);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved