結構體大小及內存對齊
#include<iostream>
using namespace std;
struct Box {
double a;
char b;
};
class TEST {
Box b;
char c;
};
int main()
{
Box box;
cout << sizeof(box) << endl; //16
TEST st1;
cout << sizeof(st1) << endl; //24
return 0;
}
上面這個現象的出現就是由於採用了內存對齊,關於內存對齊,下面這篇文章比較好理解,大家速戳
內存對齊
關於好多課本上的一種常見寫法
#include<iostream>
using namespace std;
typedef struct LNode {
int data;
struct LNode* next;
}*LinkList;
int main()
{
LinkList link = new LNode;
return 0;
}
這裏的意思就是 typedef struct LNode * LinkList; 所以LinkList 和 LNode * 是一回事,二者等價
共用體
它能存儲不同的數據類型,但只能同時存儲其中的一種類型。由於每次只能存儲一個值,所以必須有足夠大的空間類存儲最大的成員,所以共用體的長度爲其最大成員的長度
union id {
int a;
double b;
};
sizeof(id) 8
枚舉類型
#include<iostream>
using namespace std;
int main()
{
//one,two,three被稱爲枚舉量
enum bit {one, two, three, four};
bit mybit;
//mybit = 1; //錯誤寫法
mybit = one;
//不能將int直接賦給枚舉類,需要進行轉換
mybit = bit(1);
cout << mybit << endl;
//mybit++;//錯誤寫法
int a = two + 3; //這裏將two轉化爲int數據 1
cout << a << endl;
//下面這裏錯誤是因爲 one+two都被轉化爲int進行計算,結果爲1,但是1是int,然後不能賦值給枚舉類型
//mybit = one + two;
//枚舉量的值可以進行設置,如果不設置,第一個枚舉量默認爲0,後面的比前面的大 1
enum {red=1,blue=20,black=30};
return 0;
}