01/10/2018, 11:48

Xin chỉ giáo về Struct size

Em chào mọi người ạ .
Hiện em đang học về Struct nhưng có 1 số thắc mắc về phần size of Struct mong các tiền bối có thể cho em lời khuyên ạ.

Em khai báo 1 Struct như sau

Struct SIZE
{   int a;
int b;
char c;
char d;
}

lúc em tính size của nó sẽ ra kết quả là 12 byte. Em hiểu nhưng lúc em thay đổi 1 số biến ở trong đó giả dụ như em khai báo Struct sau thì kết quả lại không đúng theo cách em suy luận ạ.

Struct Test
{
char t[9];
char a;
}

thì theo cách tính nếu giống bài ở trên thì kq đáng lẽ phải là 12 byte chứ ạ nhưng đằng này nó lại trả về kết quả là 10 byte ạ. Các anh chị có thể chỉ cho em nó sai ở đâu được không ạ ? và làm sao để tính ra được 10 chứ không phải 12 ạ ? Em cảm ơn mọi người nhiều ạ .

Hải Duy Nguyễn viết 14:01 ngày 01/10/2018

Ko rõ bạn quan tâm đến size của struct làm gì
Ở 1 thì mỗi biến 4 byte + lại là 12 không nói
Nhưng ở 2. Bạn suy luận kiểu gì mà lại là 12 bytes
Nếu 9 ( biến 1 ) + 4 cho size của char a thì nó phải là 13
Nhưng ở đây char t[9] là kiểu tham chiếu. Tức là nó sẽ lưu địa chỉ của t ( chắc lưu thêm kiểu dữ liệu nữa ) nên size của cái 2 mới là 10
Bạn có thể thử bằng cách khai báo t với tất cả các szie khác chắc cũng cho về 1 kết quả size struct
=> Edit. Ko hiểu ngôn ngữ bạn đang dùng cho struct

Hải Duy Nguyễn viết 13:50 ngày 01/10/2018

Hehe. Lộn 4x4 = 16

Chắc 2 char ở đây là 1 byte + 1 byte null

chichi viết 13:49 ngày 01/10/2018

Bạn đọc thêm về padding trong struct để biết cách tính byte của struct

Mình có bài toán nhỏ như sau đố các bạn cho vui: typedef struct { char c; int i; } mstruct; Đố các bạn sizeof(mstruct) là bao nhiêu byte. Chú ý: các expert không được trả lời nhé! Mình dám cá là size của mstruct không phải là 5 bytes. Vì sao như vậy? Theo đúng lý thuyết ta học thì size của struct phải là tổng size của các thành phần bên trong nó mà. Vậy tại sao không phải là 5 bytes, có gì huyền bí ở đây? Để hiểu rõ về việc này, chúng ta hãy cùng tìm hiểu sơ qua Da…

rogp10 viết 14:01 ngày 01/10/2018

Em hiểu

Bạn hiểu như thế nào vậy

Dark.Hades viết 13:57 ngày 01/10/2018

Bạn phải nói rõ ngôn ngữ bạn dùng
Nhìn code thì bạn lẫn lộn cả C và C#
char trong C luôn luôn là 1byte

Student X viết 13:49 ngày 01/10/2018

theo x86 thì e đoán là 8 byte đúng k bác?

Bài liên quan
0