關於計算結構體陣列中位元組數
#include <stdio.h>
#include <string.h>
struct student
{
int num;
char name[20];
char sex;
float score;
};
main()
{
struct student stu_1, *p;
printf("steudent len is %d\n", sizeof(struct student));
}
*****
理論計算:結構體長度為29,但是編譯器計算為32,原因在哪裡?
解決的辦法,分別計算包含資料的時候結構體的長度:
當
struct student
{
int num;
};------長度為4;
struct student
{
int num;
char name[20];
};-----長度為24;
struct student
{
int num;
char name[20];
char sex;
}; -----長度為28, 原因在這裡,為了記憶體邊緣對齊,分配了4個位元組;
struct student
{
int num;
char name[20];
char sex;
float score;
}; ------長度為32
******************
如果:
struct student
{
int num;
char name[20];
char sex;
char sex1;
float score;
}; --長度還是32,
但是
struct student
{
int num;
char name[20];
char sex;
float score;
char sex1;
}; ----長度為36
印象加深
5 struct stu
6 {
7 double i;
8 char a[20];
9 char b;
10 char d;
11 char e;
12 char f;
13
14 float c;
15 } //這個結構體中char b d e f 無論有沒有,他的位元組數都是36個。
3 int main()
4 {
5 struct stu
6 {
7 double i;
8 char a[20];
9 char b;
10 char d;
11 char e;
12 char f;
13 char g;
14 float c;
15 }; //這裡面多加了一個char g 字元型陣列位元組數溢位(原先是8*3=24個) 所以多加了4個位元組 ,也就是40個。
最後:無論struct還是union中,有int參與,都是按照4個位元組對齊存放,
計算:佔12個位元組,但是去掉 char position[10]----10,
int banji----4個位元組
為什麼是12個?要麼是4, 要麼是10?
測試:
union
{
int banji;
char position[11];
}category;--- 佔12個位元組
union
{
// int banji;
char position[11];
}category;佔11個位元組;
兩者比較,就是有了int型別後,編譯器按照4位元組對齊方式來分配記憶體了。