第四章總結(二)

結構體大小及內存對齊

#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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章