1. 程式人生 > >C/C++結構體用法及其對齊原則

C/C++結構體用法及其對齊原則

#include <iostream>
using namespace std;

/*
	①結構體變數的首地址(比如結構體陣列就要考慮到結構體本身的地址)能夠被其最寬基本型別成員的大小所整除;
	②結構體每個成員相對結構體首地址的偏移量(offset)都是該成員大小的整數倍,如有需要編譯器會在成員之間加上填充位元組;
	③結構體的總大小為結構體最寬基本型別成員大小的整數倍,如有需要編譯器會在最末一個成員之後加上填充位元組。
*/

struct A
{
	char c1;
	int i1;
	short s1;
	double d1;
};

int main()
{
	cout << "sizeof(A)=" << sizeof(A) << endl;//輸出sizeof(A)=24,總共填充了9位元組

	//結構體的值拷貝
	A a1 = {'A',1,2,1.3};
	A a2 = a1;
	cout << a2.c1 << "," << a2.s1 << "," << a2.i1 << "," << a2.d1 << endl;

	//結構體陣列
	A arr[2] = { { 'B', 1, 2, 1.3 }, { 'C', 1, 2, 1.3 } };
	cout << "sizeof(arr)=" << sizeof(arr) << endl;//輸出48

	getchar();
	return 0;
}