
- C 程式設計教程
- C - 首頁
- C 基礎
- C - 概述
- C - 特性
- C - 歷史
- C - 環境設定
- C - 程式結構
- C - Hello World
- C - 編譯過程
- C - 註釋
- C - 詞法單元
- C - 關鍵字
- C - 識別符號
- C - 使用者輸入
- C - 基本語法
- C - 資料型別
- C - 變數
- C - 整數提升
- C - 型別轉換
- C - 型別強制轉換
- C - 布林值
- C 中的常量和字面量
- C - 常量
- C - 字面量
- C - 轉義序列
- C - 格式說明符
- C 中的運算子
- C - 運算子
- C - 算術運算子
- C - 關係運算符
- C - 邏輯運算子
- C - 位運算子
- C - 賦值運算子
- C - 一元運算子
- C - 自增和自減運算子
- C - 三元運算子
- C - sizeof 運算子
- C - 運算子優先順序
- C - 其他運算子
- C 中的決策
- C - 決策
- C - if 語句
- C - if...else 語句
- C - 巢狀 if 語句
- C - switch 語句
- C - 巢狀 switch 語句
- C 中的迴圈
- C - 迴圈
- C - while 迴圈
- C - for 迴圈
- C - do...while 迴圈
- C - 巢狀迴圈
- C - 無限迴圈
- C - break 語句
- C - continue 語句
- C - goto 語句
- C 中的函式
- C - 函式
- C - 主函式
- C - 按值呼叫函式
- C - 按引用呼叫函式
- C - 巢狀函式
- C - 可變引數函式
- C - 使用者定義函式
- C - 回撥函式
- C - 返回語句
- C - 遞迴
- C 中的作用域規則
- C - 作用域規則
- C - 靜態變數
- C - 全域性變數
- C 中的陣列
- C - 陣列
- C - 陣列的特性
- C - 多維陣列
- C - 將陣列傳遞給函式
- C - 從函式返回陣列
- C - 變長陣列
- C 中的指標
- C - 指標
- C - 指標和陣列
- C - 指標的應用
- C - 指標運算
- C - 指標陣列
- C - 指向指標的指標
- C - 將指標傳遞給函式
- C - 從函式返回指標
- C - 函式指標
- C - 指向陣列的指標
- C - 指向結構體的指標
- C - 指標鏈
- C - 指標與陣列
- C - 字元指標和函式
- C - 空指標
- C - 空型別指標
- C - 野指標
- C - 解引用指標
- C - 近、遠和巨型指標
- C - 指標陣列的初始化
- C - 指標與多維陣列
- C 中的字串
- C - 字串
- C - 字串陣列
- C - 特殊字元
- C 結構體和聯合體
- C - 結構體
- C - 結構體和函式
- C - 結構體陣列
- C - 自引用結構體
- C - 查詢表
- C - 點 (.) 運算子
- C - 列舉 (或 enum)
- C - 結構體填充和打包
- C - 巢狀結構體
- C - 匿名結構體和聯合體
- C - 聯合體
- C - 位域
- C - Typedef
- C 中的檔案處理
- C - 輸入 & 輸出
- C - 檔案 I/O (檔案處理)
- C 預處理器
- C - 預處理器
- C - 指令
- C - 預處理器運算子
- C - 宏
- C - 標頭檔案
- C 中的記憶體管理
- C - 記憶體管理
- C - 記憶體地址
- C - 儲存類
- 其他主題
- C - 錯誤處理
- C - 可變引數
- C - 命令執行
- C - 數學函式
- C - static 關鍵字
- C - 隨機數生成
- C - 命令列引數
- C 程式設計資源
- C - 問答
- C - 快速指南
- C - 速查表
- C - 有用資源
- C - 討論
C - 資料型別
C 語言中的資料型別指的是一個廣泛的系統,用於宣告不同型別的變數或函式。變數的型別決定了它在儲存器中佔用多少空間以及如何解釋儲存的位模式。在本章中,我們將學習C 語言中的資料型別。一個相關的概念是“變數”,它指的是處理器記憶體中可定址的位置。透過不同的輸入裝置捕獲的資料儲存在計算機記憶體中。可以為儲存位置分配一個符號名稱,稱為變數名。
C 是一種靜態型別語言。在實際使用變數之前,必須顯式宣告變數的名稱及其要儲存的資料型別。
C 也是一種強型別語言,這意味著不允許自動或隱式地將一種資料型別轉換為另一種資料型別。
C 語言中的型別可以分類如下:
序號 | 型別 & 描述 |
---|---|
1 | 基本型別 它們是算術型別,進一步分為:(a) 整數型別和 (b) 浮點型別。 |
2 | 列舉型別 它們也是算術型別,用於定義只能在整個程式中分配某些離散整數值的變數。 |
3 | void 型別 型別說明符void表示沒有值可用。 |
4 | 派生型別 它們包括 (a) 指標型別,(b) 陣列型別,(c) 結構體型別,(d) 聯合體型別和 (e) 函式型別。 |
陣列型別和結構體型別統稱為聚合型別。函式的型別指定函式返回值的型別。我們將在下一節中看到基本型別,而其他型別將在後續章節中介紹。
C 語言中的整數資料型別
下表提供了標準整數型別的詳細資訊,包括其儲存大小和值範圍:
型別 | 儲存大小 | 值範圍 |
---|---|---|
char | 1 位元組 | -128 到 127 或 0 到 255 |
unsigned char | 1 位元組 | 0 到 255 |
signed char | 1 位元組 | -128 到 127 |
int | 2 或 4 位元組 | -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647 |
unsigned int | 2 或 4 位元組 | 0 到 65,535 或 0 到 4,294,967,295 |
short | 2 位元組 | -32,768 到 32,767 |
unsigned short | 2 位元組 | 0 到 65,535 |
long | 8 位元組 | -9223372036854775808 到 9223372036854775807 |
unsigned long | 8 位元組 | 0 到 18446744073709551615 |
要獲取特定平臺上某個型別或變數的確切大小,可以使用sizeof運算子。表示式sizeof(type)以位元組為單位生成物件或型別的儲存大小。
整數資料型別的示例
下面是一個示例,使用 limits.h 標頭檔案中定義的不同常量來獲取機器上各種型別的尺寸:
#include <stdio.h> #include <stdlib.h> #include <limits.h> #include <float.h> int main(int argc, char** argv) { printf("CHAR_BIT : %d\n", CHAR_BIT); printf("CHAR_MAX : %d\n", CHAR_MAX); printf("CHAR_MIN : %d\n", CHAR_MIN); printf("INT_MAX : %d\n", INT_MAX); printf("INT_MIN : %d\n", INT_MIN); printf("LONG_MAX : %ld\n", (long) LONG_MAX); printf("LONG_MIN : %ld\n", (long) LONG_MIN); printf("SCHAR_MAX : %d\n", SCHAR_MAX); printf("SCHAR_MIN : %d\n", SCHAR_MIN); printf("SHRT_MAX : %d\n", SHRT_MAX); printf("SHRT_MIN : %d\n", SHRT_MIN); printf("UCHAR_MAX : %d\n", UCHAR_MAX); printf("UINT_MAX : %u\n", (unsigned int) UINT_MAX); printf("ULONG_MAX : %lu\n", (unsigned long) ULONG_MAX); printf("USHRT_MAX : %d\n", (unsigned short) USHRT_MAX); return 0; }
輸出
編譯並執行上述程式時,它在 Linux 上會產生以下結果:
CHAR_BIT : 8 CHAR_MAX : 127 CHAR_MIN : -128 INT_MAX : 2147483647 INT_MIN : -2147483648 LONG_MAX : 9223372036854775807 LONG_MIN : -9223372036854775808 SCHAR_MAX : 127 SCHAR_MIN : -128 SHRT_MAX : 32767 SHRT_MIN : -32768 UCHAR_MAX : 255 UINT_MAX : 4294967295 ULONG_MAX : 18446744073709551615 USHRT_MAX : 65535
C 語言中的浮點資料型別
下表提供了標準浮點型別的詳細資訊,包括儲存大小、值範圍及其精度:
型別 | 儲存大小 | 值範圍 | 精度 |
---|---|---|---|
float | 4 位元組 | 1.2E-38 到 3.4E+38 | 6 位小數 |
double | 8 位元組 | 2.3E-308 到 1.7E+308 | 15 位小數 |
long double | 10 位元組 | 3.4E-4932 到 1.1E+4932 | 19 位小數 |
"float.h"標頭檔案定義了宏,允許您在程式中使用這些值以及關於實數二進位制表示的其他詳細資訊。
浮點資料型別的示例
以下示例列印 float 型別的儲存空間和範圍值:
#include <stdio.h> #include <stdlib.h> #include <limits.h> #include <float.h> int main(int argc, char** argv) { printf("Storage size for float : %zu \n", sizeof(float)); printf("FLT_MAX : %g\n", (float) FLT_MAX); printf("FLT_MIN : %g\n", (float) FLT_MIN); printf("-FLT_MAX : %g\n", (float) -FLT_MAX); printf("-FLT_MIN : %g\n", (float) -FLT_MIN); printf("DBL_MAX : %g\n", (double) DBL_MAX); printf("DBL_MIN : %g\n", (double) DBL_MIN); printf("-DBL_MAX : %g\n", (double) -DBL_MAX); printf("Precision value: %d\n", FLT_DIG ); return 0; }
輸出
編譯並執行上述程式時,它在 Linux 上會產生以下結果:
Storage size for float : 4 FLT_MAX : 3.40282e+38 FLT_MIN : 1.17549e-38 -FLT_MAX : -3.40282e+38 -FLT_MIN : -1.17549e-38 DBL_MAX : 1.79769e+308 DBL_MIN : 2.22507e-308 -DBL_MAX : -1.79769e+308 Precision value: 6
注意:"sizeof" 返回 "size_t"。 "size_t" 的無符號整數型別可能會因平臺而異。而且,它可能並非在所有地方都是 long unsigned int。在這種情況下,我們使用 "%zu" 作為格式字串而不是 "%d"。
早期版本的 C 語言沒有布林資料型別。ANSI C 的 C99 標準化引入了 _bool 型別,它將零值視為 false,非零值視為 true。
C 語言中的使用者定義資料型別
有兩種使用者定義的資料型別struct和union,可以使用其他基本資料型別的組合來定義。
結構體資料型別
C 語言的獨特特性之一是將不同資料型別的變數儲存在一個變數中。提供了struct和union關鍵字來派生使用者定義的資料型別。例如,
struct student { char name[20]; int marks, age; };
聯合體資料型別
聯合體是結構體的一種特殊情況,其中聯合體變數的大小不是各個元素大小的總和(如結構體),而是對應於各個元素中最大的大小。因此,一次只能使用其中一個元素。請看以下示例
union ab { int a; float b; };
我們將在後面的章節中學習更多關於結構體和聯合體型別的知識。
C 語言中的 void 資料型別
void 型別指定沒有值可用。它用於三種情況:
序號 | 型別 & 描述 |
---|---|
1 |
函式返回 void C 語言中有各種函式不返回值,或者可以說它們返回void。不返回值的函式的返回型別為void。例如,void exit (int status); |
2 |
函式引數為 void C 語言中有各種函式不接受任何引數。不帶引數的函式可以接受 void。例如,int rand(void); |
3 |
指向 void 的指標 void *型別的指標表示物件的地址,但不表示其型別。例如,記憶體分配函式 void *malloc( size_t size );返回一個指向 void 的指標,該指標可以轉換為任何資料型別。 |
C 語言中的陣列資料型別
陣列是儲存在連續記憶體位置中的多個相同資料型別值的集合。陣列的大小在方括號 [] 中指定。例如,
int marks[5];
可以在宣告時初始化陣列。要分配的值放在括號中。
int marks[ ]={50,56,76,67,43};
C 還支援多維陣列。要了解更多關於陣列的資訊,請參閱關於C 語言中的陣列的章節。
C 語言中的指標資料型別
指標是一種特殊的變數,它儲存記憶體中另一個變數/物件的地址或引用。指標變數的名稱以星號 (*) 為字首。指標變數的型別和要指向的變數/物件必須相同。
int x; int *y; y = &x;
這裡,"y" 是一個指標變數,它儲存 "int" 型別變數 "x" 的地址。
指標用於許多不同的目的。文字字串操作和動態記憶體分配是一些必須使用指標的過程。在本教程的後面,您可以找到關於C 語言中的指標的詳細章節。