C - 數據類型

你好,未來的程序员們!歡迎來到我們令人興奮的C語言編程之旅。今天,我們將探訪C語言中迷人的數據類型領域。如果你是編程新手,別擔心;我會成為你的友好導遊,我們將一步步攻克這個主題。所以,拿起你喜歡的飲料,放鬆一下,讓我們一起進入吧!

C - Data Types

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 也可以存儲數字!
  • shortint 對於中等大小的數字來說工作正常。
  • 對於 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 位小數之後失去了精確度,而 doublelong 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 語言中的一個特殊類型。它就像一塊空白的畫布 - 它代表數據的缺失。我們主要在以下三種情況中使用它:

  1. 函數無返回值:

    void sayHello() {
    printf("Hello, World!\n");
    }
  2. 函數無參數:

    int getRandomNumber(void) {
    return 4;  // 選擇公平骰子投掷。保證隨機。
    }
  3. 泛型指針(我們將在指針部分介紹)

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