노동 조합 동일한 메모리 위치에 있는 다양한 데이터 유형의 다양한 변수 모음인 사용자 정의 데이터 유형으로 정의할 수 있습니다. 공용체는 여러 구성원으로 정의될 수도 있지만 특정 시점의 값은 단 하나의 구성원만 포함할 수 있습니다.
Union은 사용자 정의 데이터 유형이지만 구조와 달리 동일한 메모리 위치를 공유합니다.
자바는 동안을 한다
예를 통해 이것을 이해해 봅시다.
struct abc { int a; char b; }
위의 코드는 두 개의 멤버, 즉 'a' 유형으로 구성된 사용자 정의 구조입니다. 정수 그리고 'b' 유형 성격 . 'a'와 'b'의 주소를 확인해 보니 주소가 서로 다른 것을 알 수 있었습니다. 따라서 구조의 구성원이 동일한 메모리 위치를 공유하지 않는다고 결론을 내립니다.
Union을 정의할 때 Union은 구조체 정의와 동일한 방식으로 정의되지만 차이점은 Union 데이터 형식을 정의하는 데 Union 키워드가 사용되고 구조를 정의하는 데 struct 키워드가 사용된다는 점입니다. 공용체에는 데이터 멤버, 즉 'a'와 'b'가 포함되어 있습니다. 두 변수의 주소를 확인한 결과 둘 다 동일한 주소를 가지고 있음을 발견했습니다. 이는 조합원들이 동일한 메모리 위치를 공유한다는 것을 의미합니다.
메모리 할당을 그림으로 표현한 것을 살펴보겠습니다.
아래 그림은 구조를 그림으로 표현한 것입니다. 구조에는 두 개의 멤버가 있습니다. 즉, 하나는 정수 유형이고 다른 하나는 문자 유형입니다. 1 블록은 1 바이트와 같기 때문에; 따라서 'a' 변수에는 4블록의 메모리가 할당되고, 'b' 변수에는 1블록의 메모리가 할당됩니다.
아래 그림은 조합원들의 모습을 그림으로 표현한 것이다. 두 변수 모두 동일한 메모리 위치를 공유하고 동일한 초기 주소를 갖습니다.
연합에서는 회원들이 기억 장소를 공유하게 됩니다. 멤버 중 하나를 변경하려고 하면 다른 멤버에게도 반영됩니다. 예를 통해 이 개념을 이해해 보겠습니다.
union abc { int a; char b; }var; int main() { var.a = 66; printf(' a = %d', var.a); printf(' b = %d', var.b); }
위 코드에서 공용체에는 'a'와 'b'라는 두 개의 멤버가 있습니다. 'var'은 Union abc 유형의 변수입니다. 에서 기본() 메서드에서 66을 'a' 변수에 할당하므로 var.a는 화면에 66을 인쇄합니다. 'a'와 'b'는 모두 메모리 위치를 공유하므로 var.b '를 인쇄합니다 비 '(아스키 코드 66).
노조 규모 결정
노동조합의 규모는 노동조합의 가장 큰 구성원의 규모를 기준으로 결정됩니다.
예를 통해 이해해 봅시다.
union abc{ int a; char b; float c; double d; }; int main() { printf('Size of union abc is %d', sizeof(union abc)); return 0; }
우리가 알고 있듯이 int의 크기는 4바이트, char의 크기는 1바이트, float의 크기는 4바이트, double의 크기는 8바이트입니다. 4개의 변수 중 double 변수가 가장 큰 메모리를 차지하므로 총 8바이트의 메모리가 할당됩니다. 따라서 위 프로그램의 출력은 8바이트가 됩니다.
포인터를 사용하여 공용체 멤버에 액세스
(->) 화살표 연산자를 사용하여 포인터를 통해 공용체의 멤버에 액세스할 수 있습니다.
예를 통해 이해해 봅시다.
#include union abc { int a; char b; }; int main() { union abc *ptr; // pointer variable declaration union abc var; var.a= 90; ptr = &var; printf('The value of a is : %d', ptr->a); return 0; }
위의 코드에서는 var 변수의 주소를 저장하는 포인터 변수(*ptr)를 만들었습니다. 이제 ptr은 (->) 연산자를 사용하여 변수 'a'에 액세스할 수 있습니다. 따라서 위 코드의 출력은 90이 됩니다.
연결리스트 자바
C 노동조합이 필요한 이유는 무엇입니까?
C 공용체의 필요성을 이해하려면 한 가지 예를 고려하십시오. 두 가지 품목이 있는 상점을 생각해 보겠습니다.
- 서적
- 셔츠
상점 주인은 위의 두 항목에 대한 기록을 관련 정보와 함께 저장하고 싶어합니다. 예를 들어 책에는 제목, 저자, 페이지 수, 가격이 포함되고 셔츠에는 색상, 디자인, 크기 및 가격이 포함됩니다. '가격' 속성은 두 항목 모두에서 공통입니다. 상점 소유자는 속성을 저장하고 기록을 저장하는 방법을 원합니다.
처음에 그들은 아래와 같은 구조로 레코드를 저장하기로 결정했습니다.
struct store { double price; char *title; char *author; int number_pages; int color; int size; char *design; };
위의 구조는 점주가 보관하고 싶은 모든 품목으로 구성됩니다. 위의 구조는 완전히 사용 가능하지만 가격은 두 항목 모두 공통 속성이고 나머지 항목은 개별적입니다. 가격, *제목, *저자, 번호_페이지 등의 속성은 Books에 속하고, 색상, 크기, *디자인은 Shirt에 속합니다.
구조체의 멤버에 어떻게 접근할 수 있는지 살펴보겠습니다. .
과일이 몇 개 있어요?
int main() { struct store book; book.title = 'C programming'; book.author = 'Paulo Cohelo'; book.number_pages = 190; book.price = 205; printf('Size is : %ld bytes', sizeof(book)); return 0; }
위의 코드에서는 유형의 변수를 만들었습니다. 가게 . 변수인 제목, 저자, 번호_페이지, 가격에 값을 할당했지만 책 변수에는 크기, 색상, 디자인과 같은 속성이 없습니다. 그러므로 그것은 기억의 낭비이다. 위 구조의 크기는 44바이트입니다.
공용체를 사용하면 많은 공간을 절약할 수 있습니다.
#include struct store { double price; union { struct{ char *title; char *author; int number_pages; } book; struct { int color; int size; char *design; } shirt; }item; }; int main() { struct store s; s.item.book.title = 'C programming'; s.item.book.author = 'John'; s.item.book.number_pages = 189; printf('Size is %ld', sizeof(s)); return 0; }
위의 코드에서는 store 유형의 변수를 만들었습니다. 위 코드에서는 공용체를 사용했기 때문에 변수가 차지하는 가장 큰 메모리가 메모리 할당에 고려됩니다. 위 프로그램의 출력은 32바이트입니다. 구조체의 경우 44바이트를 얻었고, 공용체의 경우 얻은 크기는 44바이트입니다. 따라서 44바이트는 32바이트보다 크므로 메모리 공간이 많이 절약됩니다.