카테고리

asm (27) bootloader_x86_grub (1) C (92) compile (11) config (76) CPP (13) CSS (1) debugging (7) gimp (1) Go (1) html (1) Java (1) JavaScript (1) kernel (19) LibreOffice (3) Linux system progamming (21) MFC (1) opencv (4) OpenGL (1) PHP (1) Python (4) qemu (29) shell (3) socket (7) troubleshooting (2) ubuntu18.04 (2) windows (1)

2019/01/03

공용체 union

 공용체
자료형 모음 하나에 대한, 각기 다른 해석이 가능한 자료형
융통성이 좋음, 즉 생각을 많이 해야함.

구조는 모든 멤버에 대해 서로 다른 메모리 위치를 할당 함.
union은 모든 메모에 대해 고통 메모리 위치 할당.

union union-name
{
datatype var1;
datatype var2;
- - - - - - - - - -
- - - - - - - - - -
datatype varN;
};

멤버 저근 객체 생성 구문
union union-name obj;

객체 생성 및 공영체 멤버 접근 예
vi objet_union_acess.c

#include<stdio.h>

union Employee
{
int Id;
char Name[25];
int Age;
long Salary;
};

void main()
{

union Employee E;

printf("\nEnter Employee Id : ");
scanf("%d",&E.Id);

printf("\nEnter Employee Name : ");
scanf("%s",&E.Name);

printf("\nEnter Employee Age : ");
scanf("%d",&E.Age);

printf("\nEnter Employee Salary : ");
scanf("%ld",&E.Salary);

printf("\n\nEmployee Id : %d",E.Id);
printf("\nEmployee Name : %s",E.Name);
printf("\nEmployee Age : %d",E.Age);
printf("\nEmployee Salary : %ld",E.Salary);


}

Output :

Enter Employee Id : 1
Enter Employee Name : Kumar
Enter Employee Age : 29
Enter Employee Salary : 45000

Employee Id : -20536
Employee Name : ?$?$  ?
Employee Age : -20536
Employee Salary : 45000

멤버 손상 값 확인.

변수 사용 예제.
vi variab_union.c
#include<stdio.h>

union Employee
{
int Id;
char Name[25];
int Age;
long Salary;
};

void main()
{

union Employee E;

printf("\nEnter Employee Id : ");
scanf("%d",&E.Id);
printf("Employee Id : %d",E.Id);

printf("\n\nEnter Employee Name : ");
scanf("%s",&E.Name);
printf("Employee Name : %s",E.Name);

printf("\n\nEnter Employee Age : ");
scanf("%d",&E.Age);
printf("Employee Age : %d",E.Age);

printf("\n\nEnter Employee Salary : ");
scanf("%ld",&E.Salary);
printf("Employee Salary : %ld",E.Salary);

}

Output :
Enter Employee Id : 1
Employee Id : 1

Enter Employee Name : Kumar
Employee Name : Kumar

Enter Employee Age : 29
Employee Age : 29

Enter Employee Salary : 45000
Employee Salary : 45000

각 멤버가 한 번에 사용되기 때문에 모든 멤버에 대한 내용이 출력된다.

공용체 크기 비교
vi union_cmp.c

#include<stdio.h>

struct Employee1
{
int Id;
char Name[25];
long Salary;
};

union Employee2
{
int Id;
char Name[25];
long Salary;
};

void main()
{

printf("\nSize of Employee1 is : %d",sizeof(Employee1));
printf("\nSize of Employee2 is : %d",sizeof(Employee2));

}

Output :

Size of Employee1 is : 31

댓글 없음:

댓글 쓰기