一、基本數據類型
C 語言提供了豐富的基本數據類型,用于存儲不同類型的數據,主要包括整數類型、浮點類型和布爾類型。
1. 整數類型
整數類型用于存儲整數,根據是否帶符號以及占用存儲空間的不同,可進一步細分:
類型名 | 占用存儲空間 | 數值范圍 |
---|---|---|
char | 1 字節 | -128 到 127 或者 0 到 255 |
unsigned char | 1 字節 | 0 到 255 |
signed char | 1 字節 | -128 到 127 |
short | 至少 2 字節 | -32,768 到 32,767 |
unsigned short | 至少 2 字節 | 0 到 65,535 |
int | 至少 2 字節 | 通常與機器字長一致 |
unsigned int | 至少 2 字節 | 0 到 4,294,967,295(32 位系統) |
long | 至少 4 字節 | -2,147,483,648 到 2,147,483,647 |
unsigned long | 至少 4 字節 | 0 到 4,294,967,295 |
long long | 至少 8 字節 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
unsigned long long | 至少 8 字節 | 0 到 18,446,744,073,709,551,615 |
2. 浮點類型
浮點類型用于存儲帶小數點的數值,有單精度和雙精度之分:
類型名 | 占用存儲空間 | 精度 | 數值范圍 |
---|---|---|---|
float | 4 字節 | 約 6-7 位有效數字 | ±1.2E-38 到 ±3.4E+38 |
double | 8 字節 | 約 15-16 位有效數字 | ±2.2E-308 到 ±1.8E+308 |
long double | 8 字節或更多 | 至少和 double 一樣高 | 取決于具體實現 |
3. 布爾類型
C 語言原本沒有專門的布爾類型,不過在 C99 標準中引入了_Bool
類型,并且可以通過包含stdbool.h
頭文件使用bool
別名:
類型名 | 占用存儲空間 | 取值 |
---|---|---|
_Bool | 1 字節 | 0(假)或 1(真) |
bool | 1 字節 | false 或 true |
二、各種變量的格式占位符
在使用printf
、scanf
等函數時,需要使用格式占位符來指定數據的輸出和輸入格式。
1. 常用的格式占位符
- int:%d
- double:%lf
- float:%f
- long long:%lld
2. 整數占位符
整數占位符用于處理不同類型的整數數據:
占位符 | 對應數據類型 | 說明 |
---|---|---|
%d | int | 以十進制形式輸出有符號整數 |
%i | int | 與 % d 相同,也用于輸出十進制整數 |
%u | unsigned int | 以十進制形式輸出無符號整數 |
%o | unsigned int | 以八進制形式輸出無符號整數 |
%x | unsigned int | 以十六進制形式輸出無符號整數(小寫字母) |
%X | unsigned int | 以十六進制形式輸出無符號整數(大寫字母) |
%ld | long | 以十進制形式輸出長整型 |
%lu | unsigned long | 以十進制形式輸出無符號長整型 |
%lld | long long | 以十進制形式輸出長長整型 |
%llu | unsigned long long | 以十進制形式輸出無符號長長整型 |
3. 浮點占位符
浮點占位符用于處理浮點數數據:
占位符 | 對應數據類型 | 說明 |
---|---|---|
%f | float/double | 以十進制小數形式輸出(默認 6 位小數) |
%e | float/double | 以科學計數法形式輸出(小寫 e) |
%E | float/double | 以科學計數法形式輸出(大寫 E) |
%g | float/double | 自動選擇 % f 或 % e 中更簡潔的形式輸出 |
%G | float/double | 自動選擇 % f 或 % E 中更簡潔的形式輸出 |
4. 字符與字符串占位符
字符與字符串占位符用于處理字符和字符串數據:
占位符 | 對應數據類型 | 說明 |
---|---|---|
%c | char | 輸出單個字符 |
%s | char* | 輸出字符串,直到遇到 \0 結束 |
%p | void* | 輸出指針地址(以十六進制形式) |
5. 其他占位符
其他占位符用于特殊需求:
占位符 | 對應數據類型 | 說明 |
---|---|---|
%% | 無 | 輸出百分號 % 本身 |
%n | int* | 將已輸出的字符數存儲到指定的整型指針中 |
6. 格式控制選項
在 % 和占位符之間,還可以使用一些修飾符來更精確地控制輸出格式:
- 寬度控制:例如
%5d
表示輸出寬度為 5 的整數,不足部分用空格填充。 - 精度控制:例如
%.2f
表示輸出保留兩位小數的浮點數。 - 對齊方式:例如
%-10s
表示左對齊輸出寬度為 10 的字符串。 - 符號控制:例如
%+d
表示輸出帶符號的整數,正數也會顯示 + 號。 - 填充字符:例如
%05d
表示用 0 填充寬度不足的部分,如輸出 00042。
7. 注意事項
- 在使用
scanf
讀取字符串時,%s
會在遇到空格、制表符或換行符時停止讀取。若要讀取包含空格的字符串,可以使用%[^\n]
。 - 占位符要和對應變量的類型相匹配,否則可能會導致未定義行為。
%n
是一個比較特殊的占位符,使用時需要格外小心,因為它可能會引發安全漏洞。- 對于
long long
類型,在 Windows 系統的某些編譯器中可能需要使用%I64d
。
三、系統函數調用
在 C 語言中,可以使用system("")
函數來調用系統命令,該函數需要包含頭文件stdlib.h
。
1. 常用系統指令
cls
:清屏pause
:按任意鍵繼續cmd
:打開 cmd
2. 其他命令(win 系統命令不區分大小寫)
以下是一些常用的 Windows 系統命令:
ASSOC
:顯示或修改文件擴展名關聯ATTRIB
:顯示或更改文件屬性BREAK
:設置或清除擴展式 CTRL+C 檢查BCDEDIT
:設置啟動數據庫中的屬性以控制啟動加載CACLS
:顯示或修改文件的訪問控制列表 (ACL)CALL
:從另一個批處理程序調用這一個CD
:顯示當前目錄的名稱或將其更改CHCP
:顯示或設置活動代碼頁數CHDIR
:顯示當前目錄的名稱或將其更改CHKDSK
:檢查磁盤并顯示狀態報告CHKNTFS
:顯示或修改啟動時間磁盤檢查COLOR
:設置默認控制臺前景和背景顏色COMP
:比較兩個或兩套文件的內容COMPACT
:顯示或更改 NTFS 分區上文件的壓縮CONVERT
:將 FAT 卷轉換成 NTFS,你不能轉換當前驅動器COPY
:將至少一個文件復制到另一個位置DATE
:顯示或設置日期,后面加/t
表示顯示日期DEL
:刪除至少一個文件DIR
:顯示一個目錄中的文件和子目錄DISKPART
:顯示或配置磁盤分區屬性DOSKEY
:編輯命令行、撤回 Windows 命令并創建宏DRIVERQUERY
:顯示當前設備驅動程序狀態和屬性ECHO
:顯示消息,或將命令回顯打開或關閉ENDLOCAL
:結束批文件中環境更改的本地化ERASE
:刪除一個或多個文件EXIT
:退出 CMD.EXE 程序 (命令解釋程序)FC
:比較兩個文件或兩個文件集并顯示它們之間的不同FIND
:在一個或多個文件中搜索一個文本字符串FINDSTR
:在多個文件中搜索字符串FOR
:為一組文件中的每個文件運行一個指定的命令FORMAT
:格式化磁盤,以便用于 WindowsFSUTIL
:顯示或配置文件系統屬性FTYPE
:顯示或修改在文件擴展名關聯中使用的文件類型GOTO
:將 Windows 命令解釋程序定向到批處理程序中某個帶標簽的行GPRESULT
:顯示計算機或用戶的組策略信息GRAFTABL
:使 Windows 在圖形模式下顯示擴展字符集HELP
:提供 Windows 命令的幫助信息ICACLS
:顯示、修改、備份或還原文件和目錄的 ACLIF
:在批處理程序中執行有條件的處理操作LABEL
:創建、更改或刪除磁盤的卷標MD
:創建一個目錄MKDIR
:創建一個目錄MKLINK
:創建符號鏈接和硬鏈接MODE
:配置系統設備MORE
:逐屏顯示輸出MOVE
:將一個或多個文件從一個目錄移動到另一個目錄OPENFILES
:顯示遠程用戶為了文件共享而打開的文件PATH
:為可執行文件顯示或設置搜索路徑PAUSE
:暫停批處理文件的處理并顯示消息POPD
:還原通過 PUSHD 保存的當前目錄的上一個值PRINT
:打印一個文本文件PROMPT
:更改 Windows 命令提示PUSHD
:保存當前目錄,然后對其進行更改RD
:刪除目錄RECOVER
:從損壞的或有缺陷的磁盤中恢復可讀信息REM
:記錄批處理文件或 CONFIG.SYS 中的注釋 (批注)REN
:重命名文件RENAME
:重命名文件REPLACE
:替換文件RMDIR
:刪除目錄ROBOCOPY
:復制文件和目錄樹的高級實用工具SET
:顯示、設置或刪除 Windows 環境變量SETLOCAL
:開始本地化批處理文件中的環境更改SC
:顯示或配置服務 (后臺進程)SCHTASKS
:安排在一臺計算機上運行命令和程序SHIFT
:調整批處理文件中可替換參數的位置SHUTDOWN
:允許通過本地或遠程方式正確關閉計算機SORT
:對輸入排序START
:啟動單獨的窗口以運行指定的程序或命令SUBST
:將路徑與驅動器號關聯SYSTEMINFO
:顯示計算機的特定屬性和配置TASKLIST
:顯示包括服務在內的所有當前運行的任務TASKKILL
:中止或停止正在運行的進程或應用程序TIME
:顯示或設置系統時間,后面加/t
表示顯示時間TITLE
:設置 CMD.EXE 會話的窗口標題,如TITLE 你想改成啥
TREE
:以圖形方式顯示驅動程序或路徑的目錄結構,如TREE D:
TYPE
:顯示文本文件的內容,如TYPE D:\\文本.txt
VER
:顯示 Windows 的版本VERIFY
:告訴 Windows 是否進行驗證,以確保文件正確寫入磁盤VOL
:顯示磁盤卷標和序列號XCOPY
:復制文件和目錄樹WMIC
:在交互式命令 shell 中顯示 WMI 信息
四、運算符優先級
C++ 運算符的優先級決定了表達式中運算符的計算順序,以下是 C 語言中運算符的優先級列表,按照從高到低的順序排列,同一行中的運算符具有相同的優先級:
優先級 | 運算符 | 結合性 |
---|---|---|
優先級 1 | ::(作用域解析) | 從左到右 |
優先級 2 | ++、--(后綴) ()(函數調用) [](數組下標) .(成員訪問) ->(通過指針的成員訪問) | 從左到右 |
優先級 3 | ++、--(前綴) +、-(一元) !、~(邏輯非、按位取反) (type)(強制類型轉換) *(解引用) &(取地址) sizeof new、delete | 從右到左 |
優先級 4 | .、->(成員指針訪問) | 從左到右 |
優先級 5 | *、/、%(乘、除、取模) | 從左到右 |
優先級 6 | +、-(加、減) | 從左到右 |
優先級 7 | <<、>>(位左移、位右移) | 從左到右 |
優先級 8 | <、<=、>、>=(關系比較) | 從左到右 |
優先級 9 | ==、!=(相等性比較) | 從左到右 |
優先級 10 | &(按位與) | 從左到右 |
優先級 11 | ^(按位異或) | 從左到右 |
優先級 12 | `(按位或) | 從左到右 |
優先級 13 | &&(邏輯與) | 從左到右 |
優先級 14 | ||(邏輯或) | 從左到右 |
優先級 15 | ?:(三元條件) | 從右到左 |
優先級 16 | =、+=、-=、*=、/=、%= <<=、>>=、&=、^=、`= | 從右到左 |
優先級 17 | ,(逗號) | 從左到右 |
注意事項
- 優先級高的運算符先計算,例如
a + b * c
中,乘法先計算,因為*
的優先級高于+
。 - 結合性決定相同優先級運算符的計算順序,例如賦值運算符是右結合的,因此
a = b = c
等價于a = (b = c)
。 - 使用括號
()
可以強制改變計算順序,例如(a + b) * c
中加法先計算。 - 邏輯運算符
&&
和||
具有短路特性,即當結果可以提前確定時,不會計算后續表達式。