目錄
1. 基本數據類型
整型
浮點型
字符型
2. 構造數據類型
數組
結構體
聯合體(共用體)
枚舉類型
3. 指針類型
4. 空類型
在 C 語言中,數據類型是非常重要的概念,它決定了數據在內存中的存儲方式、占用空間大小以及可進行的操作。C 語言的數據類型主要分為基本數據類型、構造數據類型、指針類型和空類型,下面詳細介紹:
1. 基本數據類型
基本數據類型是 C 語言中最基礎的數據類型,是構建其他復雜數據類型的基石。
整型
int
- 說明:用于表示整數,在不同的編譯器和系統環境下,其占用的字節數可能不同。一般在 32 位和 64 位系統中,
int
?通常占用 4 個字節(32 位),取值范圍大約是 -2147483648 到 2147483647。 - 代碼示例:
- 說明:用于表示整數,在不同的編譯器和系統環境下,其占用的字節數可能不同。一般在 32 位和 64 位系統中,
#include <stdio.h>
int main() {int num = 123;printf("整數: %d\n", num);return 0;
}
short
(短整型)- 說明:通常占用 2 個字節(16 位),取值范圍比?
int
?小,大約是 -32768 到 32767。 - 代碼示例:
- 說明:通常占用 2 個字節(16 位),取值范圍比?
#include <stdio.h>
int main() {short s = 100;printf("短整型: %hd\n", s);return 0;
}
long
(長整型)- 說明:在 32 位系統中,
long
?通常占用 4 個字節;在 64 位系統中,一般占用 8 個字節(64 位)。其取值范圍比?int
?更大。 - 代碼示例:
- 說明:在 32 位系統中,
#include <stdio.h>
int main() {long l = 123456789L;printf("長整型: %ld\n", l);return 0;
}
long long
(更長的長整型)- 說明:至少占用 8 個字節,能表示更大范圍的整數,取值范圍大約是 -9223372036854775808 到 9223372036854775807。
- 代碼示例:
#include <stdio.h>
int main() {long long ll = 123456789012345LL;printf("更長的長整型: %lld\n", ll);return 0;
}
浮點型
float
(單精度浮點型)- 說明:用于表示小數,通常占用 4 個字節,能提供大約 6 - 7 位有效數字。
- 代碼示例:
#include <stdio.h>
int main() {float f = 3.14f;printf("單精度浮點型: %f\n", f);return 0;
}
double
(雙精度浮點型)- 說明:占用 8 個字節,能提供大約 15 - 16 位有效數字,精度比?
float
?更高。 - 代碼示例:
- 說明:占用 8 個字節,能提供大約 15 - 16 位有效數字,精度比?
#include <stdio.h>
int main() {double d = 3.1415926;printf("雙精度浮點型: %lf\n", d);return 0;
}
字符型
char
- 說明:用于表示單個字符,占用 1 個字節。實際上存儲的是字符的 ASCII 碼值。
- 代碼示例:
#include <stdio.h>
int main() {char ch = 'A';printf("字符: %c\n", ch);printf("字符的ASCII碼值: %d\n", ch);return 0;
}
2. 構造數據類型
構造數據類型是由基本數據類型或其他構造數據類型組合而成的數據類型。
數組
- 說明:是一組相同類型元素的有序集合。數組的大小在定義時需要確定,其元素可以通過下標訪問。
- 代碼示例:
#include <stdio.h>
int main() {int arr[5] = {1, 2, 3, 4, 5};for (int i = 0; i < 5; i++) {printf("arr[%d] = %d\n", i, arr[i]);}return 0;
}
結構體
- 說明:可以將不同類型的數據組合在一起,形成一個新的數據類型。結構體中的每個成員可以有不同的數據類型。
- 代碼示例:
#include <stdio.h>
// 定義結構體
struct Student {char name[20];int age;float score;
};int main() {struct Student s = {"Tom", 20, 85.5};printf("姓名: %s\n", s.name);printf("年齡: %d\n", s.age);printf("成績: %f\n", s.score);return 0;
}
聯合體(共用體)
- 說明:聯合體的所有成員共享同一塊內存空間,同一時間只能使用其中一個成員。
- 代碼示例:
#include <stdio.h>
// 定義聯合體
union Data {int i;float f;char str[20];
};int main() {union Data data;data.i = 10;printf("整型值: %d\n", data.i);data.f = 3.14f;printf("浮點型值: %f\n", data.f);return 0;
}
枚舉類型
- 說明:用于定義一組具有離散整數值的常量。枚舉類型的每個枚舉常量都對應一個整數值,默認從 0 開始遞增。
- 代碼示例:
#include <stdio.h>
// 定義枚舉類型
enum Weekday {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
};int main() {enum Weekday today = WEDNESDAY;printf("今天是一周中的第 %d 天(從0開始計數)\n", today);return 0;
}
3. 指針類型
- 說明:指針是一種特殊的數據類型,用于存儲變量的內存地址。通過指針可以間接訪問和修改該地址處存儲的數據。
- 代碼示例:
#include <stdio.h>
int main() {int num = 10;int *ptr = # // 定義一個指向整型變量的指針,并初始化為num的地址printf("變量num的值: %d\n", num);printf("指針ptr指向的值: %d\n", *ptr);*ptr = 20; // 通過指針修改num的值printf("修改后變量num的值: %d\n", num);return 0;
}
4. 空類型
- 說明:
void
?表示空類型,主要用于以下幾種情況:- 函數返回值為空,如?
void func()
。 - 函數參數為空,如?
int func(void)
。 - 定義通用指針,如?
void *ptr
,可以指向任意類型的數據,但在使用時需要進行類型轉換。
- 函數返回值為空,如?
- 代碼示例:
#include <stdio.h>
// 函數返回值為空
void printMessage() {printf("這是一個無返回值的函數。\n");
}// 函數參數為空
int getValue(void) {return 100;
}int main() {printMessage();int val = getValue();printf("getValue函數返回的值: %d\n", val);int num = 20;void *ptr = # // 定義一個void指針int *intPtr = (int *)ptr; // 類型轉換printf("通過void指針訪問的值: %d\n", *intPtr);return 0;
}