【完整指南】徹底解析 C 語言資料型別與大小|int、long、struct、sizeof 全面說明

1. 前言

C語言是廣泛用於嵌入式系統、系統程式設計等多種用途的程式語言。其中,「資料型別」與「大小」對程式的記憶體使用與效能有重大影響。特別是當在不同環境(32位元 / 64位元、Windows / Linux 等)執行程式時,資料型別的大小可能會改變,因此選擇正確的型別非常重要。 本篇文章將說明 C 語言的基本資料型別大小、環境差異、適當型別選擇的要點。進一步介紹 sizeof 運算子用法,以及固定寬度整數型別(stdint.h)的使用方式等實務資訊。藉此加深對 C 語言型別的理解,並能進行更有效率的程式設計。

2. C語言的基本資料型別與大小

2.1 整數型大小列表

資料型別32 位元環境64 位元環境最小大小
char1 位元組1 位元組1 位元組
short2 位元組2 位元組2 位元組
int4 位元組4 位元組2 位元組
long4 位元組8 位元組4 位元組
long long8 位元組8 位元組8 位元組

2.2 浮點型大小列表

資料型別32 位元環境64 位元環境
float4 位元組4 位元組
double8 位元組8 位元組
long double8~16 位元組16 位元組
侍エンジニア塾

3. 資料型大小的環境相依性

3.1 各作業系統與編譯器的大小差異

資料型別Windows (LLP64)Linux (LP64)32 位元 環境
int4 位元組4 位元組4 位元組
long4 位元組8 位元組4 位元組
long long8 位元組8 位元組8 位元組

4. sizeof 運算子確認資料型別的大小

4.1 sizeof 的基本

#include <stdio.h>

int main() {
    printf("Size of int: %zu bytesn", sizeof(int));
    printf("Size of double: %zu bytesn", sizeof(double));
    return 0;
}

5. 固定寬度整數型(stdint.h 的使用)

#include <stdio.h>
#include <stdint.h>

int main() {
    int8_t a = 100;
   16_t b = 50000;
    int32_t c = -123456;
    uint64_t d = 1000000000ULL;

    printf("Size of int8_t: %zu bytesn", sizeof(a));
    printf("Size of uint16_t: %zu bytesn", sizeof(b));
    printf("Size of int32_t: %zu bytesn", sizeof(c));
    printf("Size of uint64_t: %zu bytesn", sizeof(d));

    return 0;
}

6. 結構體的大小與對齊

6.1 結構體的記憶體布局

#include <stdio.h>

struct example {
    char a;
    int b;
    double c;
};

int main() {
    printf("Size of struct: %zu bytesn", sizeof(struct example));
    return 0;
}

7. 適當的資料型別選擇方式

7.1 整數型別的選擇方式

資料型別大小範圍
int8_t1B-128 ~ 127
uint8_t1B0 ~ 255
int32_t4B約 -2.1B ~ 2.1B
uint32_t4B0 ~ 4.2B

8. FAQ(常見問題)

Q1: sizeof 的結果為 unsigned int 的原因是什麼?

A: 在 C 語言中,sizeof 的返回值是 size_t 型,屬於無符號整數型。由於不存在負的大小,因而被定義為安全的型別。
size_t size = sizeof(int);
printf("int 的大小:%zu 位元組\\n", size);

9. 總結

9.1 本文的重要要點

資料型的大小依賴於環境使用 sizeof 確認實際大小活用固定寬度整數型結構體的大小受記憶體對齊影響適當資料型的選擇方式
年収訴求