Skip to content

C-1.1 Types & sizeof

ใน C ทุก type บอกคุณตรงๆ ว่ามันกิน memory เท่าไหร่ — ไม่มีซ่อน ไม่มีเดา ถ้าคุณรู้ขนาดของ type คุณรู้ต้นทุนของ data

ทำไม Size ถึงสำคัญ?

Section titled “ทำไม Size ถึงสำคัญ?”

ลองคิดแบบนี้ — ถ้าคุณมีตาราง 1 ล้านแถว:

  • ถ้าใช้ int (4 bytes) ต่อแถว = 4 MB
  • ถ้าใช้ long (8 bytes) ต่อแถว = 8 MB
  • เลือก type ผิด = เปลือง memory เป็นเท่าตัว
Typeขนาด (bytes)เก็บอะไรช่วงค่า
char1ตัวอักษร / เลขเล็กๆ-128 ถึง 127 (หรือ 0–255)
int4จำนวนเต็มประมาณ -2 พันล้าน ถึง +2 พันล้าน
long8จำนวนเต็มใหญ่ประมาณ -9.2 x 10^18
float4ทศนิยม (ความแม่นต่ำ)~7 หลักนัยสำคัญ
double8ทศนิยม (ความแม่นสูง)~15 หลักนัยสำคัญ

sizeof() — เครื่องมือวัดขนาดจริง

Section titled “sizeof() — เครื่องมือวัดขนาดจริง”

นี่คือจุดแข็งของ C — คุณวัดทุกอย่างได้ตรงๆ:

#include <stdio.h>
int main() {
printf("char: %zu bytes\n", sizeof(char)); // 1
printf("int: %zu bytes\n", sizeof(int)); // 4
printf("long: %zu bytes\n", sizeof(long)); // 8
printf("float: %zu bytes\n", sizeof(float)); // 4
printf("double: %zu bytes\n", sizeof(double)); // 8
// วัดตัวแปรจริงก็ได้
int age = 25;
printf("\nage (%d) uses %zu bytes\n", age, sizeof(age));
double salary = 45000.50;
printf("salary (%.2f) uses %zu bytes\n", salary, sizeof(salary));
return 0;
}

ลองรันเอง: copy code นี้ไปวางที่ onlinegdb.com แล้วกด Run

สิ่งที่ C บอกคุณ:

  • sizeof(char) = 1 → ตัวอักษร 1 ตัวใช้ 1 byte เสมอ
  • sizeof(int) = 4 → เลขจำนวนเต็มใช้ 4 bytes
  • sizeof(double) = 8 → ทศนิยมแม่นยำใช้ 8 bytes

นี่คือ “ราคาจริง” ของ data ที่ภาษาอื่นซ่อนไว้

จับคู่ C Types กับ SQL Types

Section titled “จับคู่ C Types กับ SQL Types”
C type SQL type ขนาด
───────── ────────────────── ─────
char → CHAR(1) 1 byte
int → INTEGER 4 bytes
long → BIGINT 8 bytes
float → REAL 4 bytes
double → DOUBLE PRECISION 8 bytes

ลองเพิ่ม short (2 bytes) และ unsigned int ลงใน code ด้านบน แล้วเปรียบเทียบขนาด

printf("short: %zu bytes\n", sizeof(short));
printf("unsigned int: %zu bytes\n", sizeof(unsigned int));

ถามตัวเอง: ทำไม unsigned int ถึงมีขนาดเท่า int? (คำใบ้: มันไม่ได้เก็บข้อมูลเพิ่ม แค่ ตีความ bits ต่างกัน)