C - 數據類型
你好,未來的程序员們!歡迎來到我們令人興奮的C語言編程之旅。今天,我們將探訪C語言中迷人的數據類型領域。如果你是編程新手,別擔心;我會成為你的友好導遊,我們將一步步攻克這個主題。所以,拿起你喜歡的飲料,放鬆一下,讓我們一起進入吧!
C語言中的整數數據類型
讓我們從我們都熟悉的東西開始 - 整數。在C語言中,我們稱之為整數,它們有不同的尺寸和類型。
基本整數類型
這裡是一個C語言中最常見整數類型的表格:
數據類型 | 大小 (字节) | 范圍 |
---|---|---|
char | 1 | -128 到 127 或 0 到 255 |
short | 2 | -32,768 到 32,767 |
int | 4 | -2,147,483,648 到 2,147,483,647 |
long | 4 或 8 | -2,147,483,648 到 2,147,483,647 或 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
讓我們看看這些類型的實際應用:
#include <stdio.h>
int main() {
char my_char = 65;
short my_short = 32000;
int my_int = 2000000000;
long my_long = 9000000000L;
printf("char: %c\n", my_char);
printf("short: %d\n", my_short);
printf("int: %d\n", my_int);
printf("long: %ld\n", my_long);
return 0;
}
當你運行這段代碼時,你會看到:
char: A
short: 32000
int: 2000000000
long: 9000000000
讓我們分解一下:
-
char
值 65 對應於 ASCII 表中的 'A'。意外!char
也可以存儲數字! -
short
和int
對於中等大小的數字來說工作正常。 - 對於
long
,我們在末尾加上 'L' 以告訴 C 它是一個長數。
無符號整數
有時,我們只需要正數。這就是無符號整數派上用場的地方:
unsigned char my_uchar = 255;
unsigned short my_ushort = 65000;
unsigned int my_uint = 4000000000U;
printf("unsigned char: %u\n", my_uchar);
printf("unsigned short: %u\n", my_ushort);
printf("unsigned int: %u\n", my_uint);
輸出:
unsigned char: 255
unsigned short: 65000
unsigned int: 4000000000
通過使用 unsigned
,我們可以在相同的內存中存儲更大的正數。這就像魔法,但其實只是巧妙地使用位!
C語言中的浮點數數據類型
現在,讓我們進入小數的世界。C 提供了三種浮點數類型:
數據類型 | 大小 (字节) | 精度 |
---|---|---|
float | 4 | 6-7 小數位 |
double | 8 | 15-16 小數位 |
long double | 16 | 19-20 小數位 |
讓我們看看它們的實際應用:
#include <stdio.h>
int main() {
float pi_float = 3.14159265358979323846f;
double pi_double = 3.14159265358979323846;
long double pi_long_double = 3.14159265358979323846L;
printf("float: %.7f\n", pi_float);
printf("double: %.16f\n", pi_double);
printf("long double: %.20Lf\n", pi_long_double);
return 0;
}
輸出:
float: 3.1415927
double: 3.1415926535897931
long double: 3.14159265358979323846
注意 float
在 7 位小數之後失去了精確度,而 double
和 long double
保持更高的準確度。這就像對數字照片進行放大 - 在某個點上,你開始看到像素!
C語言中的用户定義數據類型
C 語言允許我們創建自己的數據類型。這就像成為一名廚師並創造自己的菜譜!
結構體
結構體讓我們將相關數據組織在一起:
#include <stdio.h>
#include <string.h>
struct Student {
char name[50];
int age;
float gpa;
};
int main() {
struct Student alice;
strcpy(alice.name, "Alice");
alice.age = 20;
alice.gpa = 3.8;
printf("Name: %s\n", alice.name);
printf("Age: %d\n", alice.age);
printf("GPA: %.1f\n", alice.gpa);
return 0;
}
輸出:
Name: Alice
Age: 20
GPA: 3.8
在這裡,我們創建了一個 Student
類型,將名字、年齡和學術平均成績組合在一起。這就像為學生信息創造一個表單!
枚舉
枚舉對於創建一組命名常量來說非常棒:
#include <stdio.h>
enum Days {SUN, MON, TUE, WED, THU, FRI, SAT};
int main() {
enum Days today = WED;
printf("Today is day number %d\n", today);
return 0;
}
輸出:
Today is day number 3
枚舉會自動從 0 開始為數字分配遞增的整數值。這就像給數字起綽號!
C語言中的 void 數據類型
void
是 C 語言中的一個特殊類型。它就像一塊空白的畫布 - 它代表數據的缺失。我們主要在以下三種情況中使用它:
-
函數無返回值:
void sayHello() { printf("Hello, World!\n"); }
-
函數無參數:
int getRandomNumber(void) { return 4; // 選擇公平骰子投掷。保證隨機。 }
-
泛型指針(我們將在指針部分介紹)
C語言中的數組數據類型
數組就像一排鳩巢,每個巢中都儲存著同類型的值:
#include <stdio.h>
int main() {
int scores[5] = {85, 92, 78, 90, 88};
printf("First score: %d\n", scores[0]);
printf("Last score: %d\n", scores[4]);
float average = 0;
for(int i = 0; i < 5; i++) {
average += scores[i];
}
average /= 5;
printf("Average score: %.2f\n", average);
return 0;
}
輸出:
First score: 85
Last score: 88
Average score: 86.60
記住,在 C 語言中,數組索引從 0 開始。這就像歐洲的樓層 - 地面樓層是 0!
C語言中的指針數據類型
指針就像指向內存位置的標誌。它們很強大,但也可能有些棘手:
#include <stdio.h>
int main() {
int x = 10;
int *p = &x;
printf("Value of x: %d\n", x);
printf("Address of x: %p\n", (void*)&x);
printf("Value of p: %p\n", (void*)p);
printf("Value pointed by p: %d\n", *p);
*p = 20;
printf("New value of x: %d\n", x);
return 0;
}
輸出(地址會有所不同):
Value of x: 10
Address of x: 0x7ffd5e8e3964
Value of p: 0x7ffd5e8e3964
Value pointed by p: 10
New value of x: 20
在這裡,p
是一個指針,它存儲 x
的地址。我們可以使用 *p
來訪問或修改該地址中的值。這就像對 x
有了一個遙控器!
這就是 C 語言中的主要數據類型。記住,理解數據類型對於有效地管理內存和避免錯誤至關重要。持續練習,不久你將能夠像專家一樣玩轉這些類型!快樂編程!
Credits: Image by storyset