C——聯合體(共同體)總結


聯合體的特點

1、聯合體是一種結構,在這個結構中能夠不同類型的成員,但同一時間僅僅能存放當中的一種。

#include <stdio.h>

union  Demo
{
	int a;
	char b;
	long long c;
};

int main(){
	union Demo demo;
	demo.a = 10;

	printf("a=%d\n", demo.a);
	printf("b=%d\n", demo.b);
	printf("c=%d\n", demo.c);
	return 0;
}


2、聯合體全部成員的首地址都是一樣的(共享同一塊內存空間)。

#include <stdio.h>

union  Demo
{
	int a;
	char b;
	long long c;
};

int main(){
	printf("%p\n", &demo.a);
	printf("%p\n", &demo.b);
	printf("%p\n", &demo.c);
	return 0;
}


3、聯合體所占的內存的長度,一般等於其最大成員的內存長度。

#include <stdio.h>

union  Demo
{
	int a;
	char b;
	long long c;
};

int main(){
	union Demo demo;
	printf("%d\n", sizeof(demo));
	return 0;
}


4、聯合體成員的對齊方式要適合全部的成員。

#include <stdio.h>

union  Demo
{
	int a;// 4個字節
	char b;// 2個字節
	long long c;// 8個字節
	char d[11];// 11個字節
};

int main(){
	union Demo demo;
	printf("%d\n", sizeof(demo));
	return 0;
}



上面聯合體變量demo的大小之所以不是11個字節而是16個字節,是由於這里存在節對齊問題

11既不能被2整除,也不能被4,、8整除,因此補充字節到16,因此就符合全部成員自身內存對齊了。

這里能夠看出聯合體所占空間的大小,不僅取決於最大成員的內存大小。並且跟全部成員的數據類型有關系。其大小必須滿足兩個必須條件:

1、大小足夠容納其最寬的成員。

2、大小能被全部成員類型的大小所整除。


聯合體內部指針成員變量

對於聯合體來講最主要的原則是。一次僅僅操作一個成員變量,假設這個變量是指針,那么一定是處理完指針相應的內存之后再來使用其它成員。








免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM