D 프로그래밍-유니온
ㅏ unionD에서 사용 가능한 특수 데이터 유형으로 동일한 메모리 위치에 다른 데이터 유형을 저장할 수 있습니다. 여러 멤버로 유니온을 정의 할 수 있지만 주어진 시간에 하나의 멤버 만 값을 포함 할 수 있습니다. 공용체는 여러 목적을 위해 동일한 메모리 위치를 사용하는 효율적인 방법을 제공합니다.
D에서 Union 정의
공용체를 정의하려면 구조를 정의 할 때와 매우 유사한 방식으로 공용체 문을 사용해야합니다. union 문은 프로그램에 대해 둘 이상의 멤버를 사용하여 새 데이터 유형을 정의합니다. 통합 문의 형식은 다음과 같습니다.
union [union tag] {
member definition;
member definition;
...
member definition;
} [one or more union variables];
그만큼 union tag선택적이며 각 멤버 정의는 int i와 같은 일반 변수 정의입니다. 또는 float f; 또는 다른 유효한 변수 정의. 공용체 정의의 끝에서 마지막 세미콜론 앞에 하나 이상의 공용체 변수를 지정할 수 있지만 선택 사항입니다. 다음은 세 멤버가있는 Data라는 공용체 유형을 정의하는 방법입니다.i, f, 및 str −
union Data {
int i;
float f;
char str[20];
} data;
변수 Datatype은 정수, 부동 소수점 숫자 또는 문자열을 저장할 수 있습니다. 이는 단일 변수 (동일한 메모리 위치)를 사용하여 여러 유형의 데이터를 저장할 수 있음을 의미합니다. 요구 사항에 따라 통합 내에서 기본 제공 또는 사용자 정의 데이터 유형을 사용할 수 있습니다.
노조가 차지하는 메모리는 노조의 가장 큰 구성원을 보유 할만큼 충분히 클 것입니다. 예를 들어 위의 예에서 데이터 타입은 문자열이 차지할 수있는 최대 공간이기 때문에 20 바이트의 메모리 공간을 차지합니다. 다음 예제는 위의 합집합이 차지하는 총 메모리 크기를 표시합니다.
import std.stdio;
union Data {
int i;
float f;
char str[20];
};
int main( ) {
Data data;
writeln( "Memory size occupied by data : ", data.sizeof);
return 0;
}
위의 코드가 컴파일되고 실행되면 다음과 같은 결과가 생성됩니다.
Memory size occupied by data : 20
조합원 액세스
노조의 구성원에 액세스하려면 member access operator (.). 멤버 액세스 연산자는 유니온 변수 이름과 액세스하려는 유니온 멤버 사이의 마침표로 코딩됩니다. union 키워드를 사용하여 공용체 유형의 변수를 정의합니다.
예
다음 예제는 union의 사용법을 설명합니다.
import std.stdio;
union Data {
int i;
float f;
char str[13];
};
void main( ) {
Data data;
data.i = 10;
data.f = 220.5;
data.str = "D Programming".dup;
writeln( "size of : ", data.sizeof);
writeln( "data.i : ", data.i);
writeln( "data.f : ", data.f);
writeln( "data.str : ", data.str);
}
위의 코드가 컴파일되고 실행되면 다음과 같은 결과가 생성됩니다.
size of : 16
data.i : 1917853764
data.f : 4.12236e+30
data.str : D Programming
여기에서 i 과 f 변수에 할당 된 최종 값이 메모리 위치를 차지했기 때문에 union의 구성원이 손상되었으며, 이것이 str 회원이 아주 잘 인쇄되고 있습니다.
이제 한 번에 하나의 변수를 사용하는 동일한 예제를 다시 살펴 보겠습니다.
수정 된 예
import std.stdio;
union Data {
int i;
float f;
char str[13];
};
void main( ) {
Data data;
writeln( "size of : ", data.sizeof);
data.i = 10;
writeln( "data.i : ", data.i);
data.f = 220.5;
writeln( "data.f : ", data.f);
data.str = "D Programming".dup;
writeln( "data.str : ", data.str);
}
위의 코드가 컴파일되고 실행되면 다음과 같은 결과가 생성됩니다.
size of : 16
data.i : 10
data.f : 220.5
data.str : D Programming
여기에서는 한 번에 하나의 멤버를 사용하기 때문에 모든 멤버가 매우 잘 인쇄되고 있습니다.