×

Trả về kích thước của kiểu dữ liệu hoặc biến với sizeof trong C

Trong ngôn ngữ lập trình C, việc biết kích thước của các kiểu dữ liệu và biến đóng vai trò quan trọng khi lập trình. Một trong những công cụ mạnh mẽ được cung cấp bởi ngôn ngữ này để thực hiện điều đó là toán tử sizeof. Toán tử này cho phép lập trình viên xác định kích thước bộ nhớ mà một kiểu dữ liệu hoặc một biến chiếm, dưới dạng số byte.

Sử dụng sizeof với các kiểu dữ liệu cơ bản

Khi sử dụng toán tử sizeof với các kiểu dữ liệu cơ bản như int, char, float, double, kết quả sẽ trả về kích thước của kiểu dữ liệu tương ứng trong byte. Dưới đây là một số ví dụ minh họa:

#include <stdio.h>

int main() {
    printf("Kich thuoc cua int: %zu byte\n", sizeof(int));
    printf("Kich thuoc cua char: %zu byte\n", sizeof(char));
    printf("Kich thuoc cua float: %zu byte\n", sizeof(float));
    printf("Kich thuoc cua double: %zu byte\n", sizeof(double));
    return 0;
}

Kết quả sẽ khác nhau tùy thuộc vào hệ điều hành và kiến trúc máy tính, nhưng ví dụ trên thường sẽ cho kết quả tương tự như dưới đây trên hệ thống 64-bit:

Kich thuoc cua int: 4 byte
Kich thuoc cua char: 1 byte
Kich thuoc cua float: 4 byte
Kich thuoc cua double: 8 byte

Sử dụng sizeof với các biến

Khi sizeof được áp dụng lên các biến, nó sẽ trả về kích thước của kiểu dữ liệu mà biến đó được khai báo. Ví dụ:

#include <stdio.h>

int main() {
    int a;
    char b;
    float c;
    double d;
    
    printf("Kich thuoc cua bien a: %zu byte\n", sizeof(a));
    printf("Kich thuoc cua bien b: %zu byte\n", sizeof(b));
    printf("Kich thuoc cua bien c: %zu byte\n", sizeof(c));
    printf("Kich thuoc cua bien d: %zu byte\n", sizeof(d));
    return 0;
}

Sử dụng sizeof với mảng

Mảng trong C thực chất là một chuỗi các phần tử cùng kiểu dữ liệu, vì vậy khi sử dụng sizeof với mảng, kết quả trả về sẽ là tổng kích thước của tất cả các phần tử trong mảng. Ví dụ:

#include <stdio.h>

int main() {
    int arr[10];
    
    printf("Kich thuoc cua mang arr: %zu byte\n", sizeof(arr));
    return 0;
}

Kết quả sẽ là:

Kich thuoc cua mang arr: 40 byte

Do mỗi phần tử của int chiếm 4 byte và mảng có 10 phần tử.

Sử dụng sizeof với struct

Cấu trúc (struct) là một kiểu dữ liệu tự định nghĩa trong C, chứa các thành phần có nhiều kiểu dữ liệu khác nhau. Khi dùng sizeof với struct, nó sẽ trả về kích thước tổng của các thành phần trong struct, bao gồm cả phần đệm (padding) nếu có:

#include <stdio.h>

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

int main() {
    struct MyStruct s;
    
    printf("Kich thuoc cua struct MyStruct: %zu byte\n", sizeof(s));
    return 0;
}

Kết quả có thể khác nhau tùy vào cách sắp xếp và phần đệm mà trình biên dịch sử dụng:

Kich thuoc cua struct MyStruct: 16 byte

Tổng kết

Toán tử sizeof là một công cụ hữu ích và quan trọng để lập trình viên xác định lượng bộ nhớ mà một kiểu dữ liệu hoặc biến chiếm giữ trong ngôn ngữ lập trình C. Việc sử dụng đúng cách sizeof giúp lập trình viên quản lý bộ nhớ hiệu quả và tránh các lỗi phổ biến liên quan đến tràn bộ nhớ (buffer overflow).

Comments