Những thông tin cần biết về toán tử Sizeof trong C

Với ngôn ngữ lập trình C thì sẽ chứa nhiều các thuật toán, toán tử khác nhau. Trong đó Sizeof trong C được sử dụng phổ biến để tính toán xem loại dữ liệu chiếm bao nhiêu byte trong bộ nhớ. Điều này đặc biệt hữu ích khi làm việc cùng với cấu trúc. Và phân bổ bộ nhớ động bằng cách sử dụng malloc hoặc khi viết mã nhằm mục đích di động giữa các trình biên dịch C trên các nền tảng khác nhau.

Hiện nay, có một vài loại dữ liệu có thể có kích thước khác khi được biên dịch trên các hệ thống khác nhau và việc phát hiện điều này trong các chương trình của bạn sẽ giúp quá trình chuyển đổi trở nên dễ dàng hơn. Cụ thể sẽ được Box.edu chia sẻ kỹ hơn ở bài viết này nhé!

Xem thêm: Tổng quan những kiến thức cần lưu ý về hàm C fopen

Xem thêm: Chương trình C để chuyển đổi số thập phân sang định dạng nhị phân

Xem thêm: Định dạng chuỗi C string format hướng dẫn cho người mới

Cú pháp và Sizeof trong C của các kiểu dữ liệu cơ bản

cu-phap-va-sizeof-trong-c-cua-cac-kieu-du-lieu-co-ban.jpg

Cú pháp và Sizeof trong C của các kiểu dữ liệu cơ bản

Các kiểu dữ liệu cơ bản trong ngôn ngữ C bao gồm: char, short, int, long, float và double đều có các kích thước khác nhau tùy thuộc vào việc triển khai ngôn ngữ mà bạn đang làm việc và kích thước của bus dữ liệu trong đơn vị xử lý trung tâm(CPU) của máy đích. Đặc tả ngôn ngữ C thường chỉ đạt kích thước tối thiểu của các loại này.

Ngoài ra bạn cũng có thể sử dụng Sizeof trong ngôn ngữ C để trả về kích thước chính xác của các loại này cụ thể:

/ *

 *

 * Tính toán kích thước của các loại dữ liệu trong C bằng cách sử dụng Sizeof

 *

 * /

#include <stdio.h>

void main () {

printf (“\ r \ nUdemy.com – Tính kích thước của các kiểu dữ liệu trong C bằng cách sử dụng Sizeof \ r \ n \ r \ n”);

printf (“Char:% u \ r \ n”, sizeof (char));

printf (“Ngắn:% u \ r \ n”, sizeof (ngắn));

printf (“Int:% u \ r \ n”, sizeof (int));

printf (“Dài:% u \ r \ n”, sizeof (dài));

printf (“Float:% u \ r \ n”, sizeof (float));

printf (“Double:% u \ r \ n”, sizeof (double));

}

Có thể nói đa phần các triển khai của ngôn ngữ lập trình C đều trả về giá trị dưới dạng số nguyên hoặc phổ biến hơn là kiểu dữ liệu size_t. Giá trị của size_t sẽ được tự động chuyển sang các kiểu số nguyên khác trong quá trình sử dụng.

Ngoài ra Sizeof cũng có thể chấp nhận tên của một biến và sẽ trả về kích thước của kiểu cơ bản của nó. Khi sử dụng một biến, Sizeof thường có thể được đi kèm với dấu ngoặc đơn như trong ví dụ trên hoặc không có dấu ngoặc đơn như ví dụ dưới đây:

void main () {

    int i = 0;

    printf (“I:% u \ r \ n”, sizeof i);

}

Một điều cần chú ý đó là bộ tiền xử lý C sẽ chịu trách nhiệm xử lý các macro và chỉ thị tiền xử lý không có hiểu biết về các loại do đó toán tử Sizeof trong C không thể được sử dụng trong các chỉ thị như #if.

Cấu trúc của Sizeof trong C

Tiếp theo các bạn cần nắm được cấu trúc của Sizeof để có thể hiểu rõ hơn về toán tử này. Cùng theo dõi tiếp nhé!

Tùy thuộc vào hệ thống của bạn, giá trị được trả về bởi Sizeof (char) thường sẽ là 1 vì kiểu char thường được lưu trữ dưới dạng một byte duy nhất. Về mặt lý thuyết, kích thước của một cấu trúc sẽ chứa cả ba kiểu ký tự. Và trên mỗi trình biên dịch được sử dụng để kiểm tra mã trong C sẽ được thực hiện như sau:

/ * * Tính toán kích thước của các loại dữ liệu trong C bằng cách sử dụng Sizeof * * / #include <stdio.h> struct Test { ký tự c1; ký tự c2; ký tự c3; } myTest; void main () { printf ("Struct:% u \ r \ n", sizeof myTest); }

Trong trường hợp này các bạn có thể tính toán kích thước của một cấu trúc bằng cách chuyển một biến đã khai báo của kiểu đó làm đối số cho Sizeof () hoặc bằng cách sử dụng từ khóa struct trong lệnh gọi Sizeof (). Ví dụ là: Sizeof (struct Test).

Trong ví dụ đầu tiên, Sizeof (short) sẽ đồng thời trả về 2 – short và được lưu trữ dưới dạng số 16 bit, được tạo thành từ hai byte. Do vậy, kích thước của một cấu trúc chứa một kiểu ngắn và hai kiểu ký tự phải là 4. Nhưng trên thực tế nó không như vậy.

/ * * Tính toán kích thước của các loại dữ liệu trong C bằng cách sử dụng Sizeof * * / #include <stdio.h> struct Test { ký tự c1; s2 ngắn; ký tự c3; } myTest; void main () { printf ("Struct:% u \ r \ n", sizeof (myTest)); }

Nếu bạn sử dụng trình biên dịch C từ Microsoft Visual Studio. Với cài đặt trình biên dịch mặc định thì kích thước của cấu trúc này là 6 byte, không phải 4. Điều này là do quá trình đóng gói cấu trúc mà trình biên dịch sử dụng để làm việc với cấu trúc này thuận tiện hơn. Mặc dù việc đóng gói thường có thể thay đổi bằng cách sử dụng các chỉ thị của trình biên dịch, các chỉ thị này sẽ khác nhau đối với mỗi trình biên dịch. Vì vậy nếu bạn muốn mã của mình được biên dịch nguyên trạng trên các trình biên dịch khác nhau, bạn có thể cần phải dựa vào việc sử dụng Sizeof khi cấp phát bộ nhớ cho cấu trúc, đọc chúng từ các luồng đầu vào hoặc ghi chúng vào các luồng đầu ra.

Mảng, chuỗi và con trỏ Sizeof trong C

mang-chuoi-va-con-tro-sizeof-trong-c.jpg

Mảng, chuỗi và con trỏ Sizeof trong C

Sizeof () có thể được sử dụng với cả mảng và chuỗi trong C. Tuy nhiên, không phải lúc nào nó cũng hoạt động như bạn mong đợi. Kích thước của một mảng thường được trả về bởi Sizeof () là tổng số byte mà nó chiếm. Chính vì vậy mà một mảng có thể chứa 100 mục kiểu int (thường là 4 byte). Tương tương với kích thước là 400 byte.

Cụ thể để tính được độ dài của mảng (hay số lượng các mục trong mảng), thì bạn có thể sử dụng biểu thức dưới đây:

sizeof (mảng) / sizeof (mảng [0])

Ví dụ:

void main () { int buf [100]; printf ("Kích thước mảng:% u \ r \ n", sizeof (buf)); printf ("Độ dài mảng:% u \ r \ n", sizeof (buf) / sizeof (buf [0])); }

Cần lưu ý khi thực hiện truyền các đối số cho các hàm sử dụng Sizeof trong C. Để xác định kích thước của chúng. Nếu bạn sử dụng con trỏ và không thêm toán tử hội nghị thì Sizeof (). Sẽ trả về kích thước của một con trỏ. Chứ không phải kích thước của đối tượng mà nó trỏ đến.

/ * * * Udemy.com * Tính toán kích thước của các loại dữ liệu trong C bằng cách sử dụng Sizeof * * / #include <stdlib.h> #include <stdio.h> Typedef struct Kiểm tra { ký tự c1; ký tự c2; ký tự c3; } myTest; void main () { myTest * mTest;

printf ("\ r \ nUdemy.com - Tính kích thước của các kiểu dữ liệu trong C bằng cách sử dụng Sizeof \ r \ n \ r \ n");

mTest = (myTest *) malloc (sizeof (myTest)); printf ("Kích thước của Con trỏ:% u \ r \ n", sizeof (mTest)); printf ("Kích thước của Struct:% u \ r \ n", sizeof (* mTest)); miễn phí (mTest); }

Tìm hiểu thêm về Sizeof trong C

Trong các ngôn ngữ có nguồn gốc từ C, ví dụ như C ++ và Objective-C. Thì toán tử Sizeof chủ yếu hoạt động dựa trên các kiểu dữ liệu cơ bản. Theo cách tương tự khi được mô tả ở đây. Tuy nhiên, các lớp và đối tượng thường sẽ được đóng gói. Và đệm theo kiểu tương tự giống như cấu trúc C. Hoặc có thể là con trỏ. Đối với cả 2 trường hợp này thì việc sử dụng toán tử Sizeof. Có thể gây khó khăn và các hàm. Hay toán tử khác thường được cung cấp để thực hiện công việc.

Những ví dụ ở trên được trình bày tương đối cơ bản. Nhưng chúng lại có liên quan đến việc sử dụng các tính năng của ngôn ngữ C. Do đó với những bạn mới bắt đầu thì khuyến khích. Nên tìm hiểu về Sizeof trong C. Cùng những toán tử khác để có thể hiểu rõ hơn về ngôn ngữ lập trình C.

Tổng kết

Qua những thông tin về Sizeof trong C được Box.edu tổng hợp. Và chia sẻ đến các bạn thì mong rằng sẽ đem lại cho bạn thêm nhiều những kiến thức bổ ích. Trong việc học ngôn ngữ C một cách hiệu quả. Bản thân lập trình viên cũng cần bổ sung cho mình nhiều thông tin. Quan trọng về các toán tử trong C nhiều hơn nữa để phục vụ cho quá trình làm việc. Cuối cùng là chúc các bạn thành công!

5

/

5

(

5

bình chọn

)