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

C Primer Plus 學習筆記(第 3 章):數據與 C —— 變量、常量、基本類型全解析

     編輯:關於C語言

3.1 示例程序:變量與輸出


#include 
int main(void) {
    int ten = 10;
    int two = 2;
    printf("ten = %d, two = %d\n", ten, two);
    printf("ten + two = %d\n", ten + two);
    return 0;
}

核心概念:聲明 (告知編譯器類型與名字) + 初始化 (賦予初始值)。

3.2 變量 vs 常量

  • 變量:運行時可改變的數據,需聲明類型。
  • 常量:編譯期確定、運行期不可改的值 (字面量、const 修飾變量、#define 宏)。

3.3 C 標準演進中的類型關鍵字

標準關鍵字說明
K&R Cint, long, short, unsigned, char, float, double7 大基礎類型
C90signed, void明確有符號、空類型
C99_Bool, _Complex, _Imaginary布爾、複數、虛數 (配合 <complex.h>)

3.4 整型詳細解析

字面量進制表示

  • 十進制:123
  • 八進制:0173 (前導 0)
  • 十六進制:0x7B (前導 0x/0X)

存儲本質:無論寫法,內存中均為二進制補碼編碼。

輸出格式符

  • %d / %i:有符號十進制
  • %o:八進制 (不帶前導 0)
  • %x / %X:十六進制 (小寫/大寫)
  • %#o, %#x, %#X:帶前導 0, 0x, 0X

整型族成員

類型典型大小範圍 (32位系統)格式符用途
short / short int2 bytes-32,768 ~ 32,767%hd節省空間、硬件寄存器映射
int4 bytes-2,147,483,648 ~ 2,147,483,647%d默認整型、最自然大小
long / long int4/8 bytes至少 32 位%ld較大整數
long long (C99)8 bytes至少 64 位%lld超大整數
unsigned 系列同對應有符號0 ~ 2N-1%u, %lu, %llu非負、位運算、容器大小

鍵盤輸入與緩衝區

  • 標準輸入默認行緩衝:遇換行符、緩衝區滿、需讀入時刷新。
  • fflush(stdout) 強制刷新輸出;無標準函數刷新輸入緩衝區 (C 標準不保證 fflush(stdin) 行為)。

3.5 字符類型 char

  • 本質是小整數 (1 byte),存儲字符編碼值 (ASCII/UTF-8 碼點)。
  • 'A' (字符常量) = 整數 65;"A" (字符串) = 指向含 'A','\0' 數組的指標。
  • 有符號性實現定義:signed char / unsigned char 明確指定。
  • <limits.h> 中 CHAR_MIN, CHAR_MAX 查看範圍。

3.6 浮點類型

字面量形式

  • 十進制科學記數法:-1.56E+12, 2.87e-3 (大小寫 e 均可)。
  • 十六進制浮點 (C99):0xA.1Fp10 = (10 + 1/16 + 15/256) * 2^10 = 10364.0。

類型與精度

類型典型大小有效位數範圍約略格式符
float4 bytes6~7 位±3.4e38%f, %e, %g
double8 bytes15~16 位±1.7e308%lf, %le, %lg
long double10/12/16 bytes19+ 位更大%Lf

默認提升:float 參數傳遞給無原型函數 (如 printf) 自動提升為 double。

3.7 sizeof 運算符

  • 編譯期運算符 (非函數),返回類型或表達式佔用的字節數 (類型 size_t)。
  • sizeof(int) = 4;sizeof 3.14 = 8 (double 字面量)。
  • 字節定義:C 標準定義 sizeof(char) == 1,但 1 字節不一定是 8 位 (DSP 可能 16/32 位)。

3.8 類型轉換與最佳實踐

  1. 隱式轉換:賦值、參數傳遞、混合運算中自動發生 (整數提升、常用算術轉換)。
  2. 顯式轉換 (強制類型轉換):(type)expr,慎用,可能丟失精度/符號。
  3. 避免窄化轉換:int i = 3.14; 截斷小數;char c = 300; 溢出。
  4. 使用 <stdint.h> 固定寬度類型:int32_t, uint64_t, intptr_t 提升可移植性。
  5. 浮點比較:fabs(a - b) < epsilon,絕不直接 ==。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved