๊ตฌ์กฐ์ฒด
๊ตฌ์กฐ์ฒด ๋ ํ๋ ์ด์์ ๋ณ์ (ํฌ์ธํฐ ๋ณ์, ๋ฐฐ์ด ํฌํจ)๋ฅผ ํ๋๋ก ๋ฌถ์ ์ ์๋ ๋ณตํฉ ์๋ฃํ ์ผ๋ก, ๋ค์ํ ํํ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉํ๋ค.
๊ธฐ๋ณธ ์๋ฃํ ๋ณ์๋ฅผ ๋ฌถ์ด์ ์๋ก์ด ์๋ฃํ์ ๋ง๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ '์ฌ์ฉ์ ์ ์ ์๋ฃํ' ์ด๋ผ๊ณ ํ๋ค.
struct ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์
struct ๊ตฌ์กฐ์ฒด์ด๋ฆ
{
๋ฉค๋ฒ๋ณ์1์๋ฃํ ๋ฉค๋ฒ๋ณ์1์ด๋ฆ;
๋ฉค๋ฒ๋ณ์2์๋ฃํ ๋ฉค๋ฒ๋ณ์2์ด๋ฆ;
...
};
ex) ํ์์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ํ๋๋ก ๋ชจ์๋ค๋ฉด ํ๋ฒ, ์ด๋ฆ, ์ ๊ณต, ํ์ ๋ฑ์ ์ ๋ณด๊ฐ ์์ ๋
๋ค์ ๊ตฌ์กฐ์ฒด๋ ํ์์ ํ๋ฒ, ์ด๋ฆ, ์ ๊ณต, ํ์ ์ ์ ๋ณด๋ฅผ ๋ฌถ์ ์ ์๋๋ก ์ ์๋ ๊ตฌ์กฐ์ฒด์ด๋ค.
๊ตฌ์กฐ์ฒด ์ ์ธ
struct ๊ตฌ์กฐ์ฒด์ด๋ฆ ๊ตฌ์กฐ์ฒด๋ณ์์ด๋ฆ; struct student student1;
๊ตฌ์กฐ์ฒด์ ์ ์์ ๊ตฌ์กฐ์ฒด ๋ณ์์ ์ ์ธ์ ๋์ ์ ํ ์๋ ์๋ค.
struct ๊ตฌ์กฐ์ฒด์ด๋ฆ
{
๋ฉค๋ฒ๋ณ์1์๋ฃํ ๋ฉค๋ฒ๋ณ์1์ด๋ฆ;
๋ฉค๋ฒ๋ณ์2์๋ฃํ ๋ฉค๋ฒ๋ณ์2์ด๋ฆ;
...
}๊ตฌ์กฐ์ฒด๋ณ์์ด๋ฆ;
struct student
{
int number;
char name[20];
char major[20];
double grade;
}student1;
๊ตฌ์กฐ์ฒด ๋ฉค๋ฒ ์ ๊ทผ
๋ณ์๋ก ์ ์ธํ ๊ตฌ์กฐ์ฒด์ ๋ฉค๋ฒ์ ์ ๊ทผ ํ ๋๋ .(์ )(๋ฉค๋ฒ ์ฐ์ฐ์) ์ ์ฌ์ฉ
๊ตฌ์กฐ์ฒด๋ณ์์ด๋ฆ.๊ตฌ์กฐ์ฒด๋ฉค๋ฒ์ด๋ฆ
#include <stdio.h>
#include <string.h>
struct student
{
int number;
char name[20];
char major[20];
double grade;
};
int main(void)
{
struct student student1;
// .(์ )์ผ๋ก ๊ตฌ์กฐ์ฒด ๋ฉค๋ฒ์ ์ ๊ทผํ์ฌ ๊ฐ ํ ๋น
student1.number = 01;
strcpy(student1.name, "๊น์ ๋น");
strcpy(student1.major, "์ฌ์ด๋ฒ๋ณด์ํ๊ณผ");
student1.grade = 3.5;
// .(์ )์ผ๋ก ๊ตฌ์กฐ์ฒด ๋ฉค๋ฒ์ ์ ๊ทผํ์ฌ ๊ฐ ์ถ๋ ฅ
printf("ํ๋ฒ: %d\n", student1.number);
printf("์ด๋ฆ: %s\n", student1.name);
printf("์ ๊ณต: %s\n", student1.major);
printf("ํ์ : %.2f\n", student1.grade);
return 0;
}
์คํ๊ฒฐ๊ณผ
ํ๋ฒ: 01
์ด๋ฆ: ๊น์ ๋น
์ ๊ณต: ์ฌ์ด๋ฒ๋ณด์ํ๊ณผ
ํ์ : 3.50
โ
name๊ณผ major๋ ๋ฐฐ์ด ์ด๊ธฐ ๋๋ฌธ์ ๋ฌธ์์ด ์ ์ฅ ์ ์ํด strcpy ํจ์ ๋ฅผ ์ฌ์ฉํ๋ค.
strcpy(์ ์ฅ๋ ๋ฐฐ์ด๋ช
, ์ ์ฅํ ๋ฌธ์์ด)
๊ตฌ์กฐ์ฒด ๋ณ์ ์ ์ธ+์ด๊ธฐํ
๊ตฌ์กฐ์ฒด ๋ณ์๋ฅผ ์ ์ธํ๋ ๋์์ ๊ฐ์ ์ด๊ธฐํ ํ๋ ค๋ฉด { } ์ค๊ดํธ ์์ .(์ )(๋ฉค๋ฒ ์ฐ์ฐ์)๊ณผ ๋ฉค๋ฒ ์ด๋ฆ์ ์ ๊ณ ๊ฐ์ ํ ๋น ํ๋ค.
์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ํ๋ ๋ฉค๋ฒ ๋ณ์๋ง์ ์ด๊ธฐํ ํ ์ ์๋ค.
๋ฉค๋ฒ ๋ณ์๊ฐ ์ ์๋ ์์์ ์ด๊ธฐํ ์์๋ ์๊ด์์ผ๋ฉฐ, ์ด๊ธฐํํ์ง ์์ ๋ฉค๋ฒ ๋ณ์๋ 0์ผ๋ก ์ด๊ธฐํ ๋๋ค.
struct ๊ตฌ์กฐ์ฒด์ด๋ฆ ๊ตฌ์กฐ์ฒด๋ณ์์ด๋ฆ = { .๋ฉค๋ฒ์ด๋ฆ1 = ๊ฐ1, .๋ฉค๋ฒ์ด๋ฅธ2 = ๊ฐ2 .. }
struct student student1 = { .ํ๋ฒ = 220101, .์ด๋ฆ = "๊น์ ๋น', .์ ๊ณต = "์ฌ์ด๋ฒ๋ณด์ํ๊ณผ", .ํ์ = 3.5};
๋ฉค๋ฒ ์ด๋ฆ๊ณผ ํ ๋น ์ฐ์ฐ์ ์์ด ๊ฐ๋ง ,(์ฝค๋ง)๋ก ๊ตฌ๋ถํ์ฌ ๋์ด ํด๋ ๋๋ค.
๋จ, ์ด ๋๋ ๊ตฌ์กฐ์ฒด ๋ฉค๋ฒ๊ฐ ์ ์ธ๋ ์์๋๋ก ๋ฃ๊ณ , ๊ฐ ๋ฉค๋ฒ์ ์๋ฃํ์ ๋ง๊ฒ ๋ฃ๋๋ค.
์ฆ, ์ฒ์๋ถํฐ ์์๋๋ก ๊ฐ์ ์ฑ์ ๋ฃ์ด์ผ ํ๋ฉฐ ์ค๊ฐ์ ์๋ ๋ฉค๋ฒ๋ง ๊ฐ์ ํ ๋นํ๊ฑฐ๋, ์ค๊ฐ์ ์๋ ๋ฉค๋ฒ๋ง ์๋ตํ ์๋ ์๋ค.
struct ๊ตฌ์กฐ์ฒด์ด๋ฆ ๊ตฌ์กฐ์ฒด๋ณ์์ด๋ฆ = { ๊ฐ1, ๊ฐ2, ... }
struct student student1 = { 220101, "๊น์ ๋น", "์ฌ์ด๋ฒ๋ณด์ํ๊ณผ", 3.5 };
๊ตฌ์กฐ์ฒด์ ๋ฐฐ์ด
๊ตฌ์กฐ์ฒด ๋ฐฐ์ด์ ๋ณ์ ์ด๋ฆ ๋ค์ [ ] ๋๊ดํธ๋ฅผ ๋ถ์ธ ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ ํ๋ค.
struct ๊ตฌ์กฐ์ฒด์ด๋ฆ ๋ณ์์ด๋ฆ[ํฌ๊ธฐ];
๊ตฌ์กฐ์ฒด ๋ฐฐ์ด์์ ๊ฐ ์์์ ์ ๊ทผํ๋ ค๋ฉด ๋ฐฐ์ด ๋ค์ ๋๊ดํธ๋ฅผ ์ฌ์ฉํ๋ฉฐ ๋๊ดํธ ์์ ์ธ๋ฑ์ค๋ฅผ ์ง์ ํด ์ค๋ค.
์ฌ๊ธฐ์ ๋ฉค๋ฒ์ ์ ๊ทผํ๋ ค๋ฉด .(์ )(๋ฉค๋ฒ ์ฐ์ฐ์)์ ์ฌ์ฉ ํ๋ค.
#include <stdio.h>
#include <string.h>
struct student
{
int number;
char name[20];
char major[20];
double grade;
};
int main(void)
{
struct student arr[3]; // ํฌ๊ธฐ๊ฐ 3์ธ ๊ตฌ์กฐ์ฒด ๋ฐฐ์ด ์์ฑ
int i;
// ์ธ๋ฑ์ค๋ก ์์์ ์ ๊ทผํ ๋ค .(์ )์ผ๋ก ๋ฉค๋ฒ์ ์ ๊ทผ
arr[0].number = 21012345;
strcpy(arr[0].name, "๊น์ธ์ข
");
strcpy(arr[0].major, "์ปดํจํฐ๊ณตํ๊ณผ");
arr[0].grade = 3.5;
arr[1].number = 21012346;
strcpy(arr[1].name, "์ด์ธ์ข
");
strcpy(arr[1].major, "์ํํธ์จ์ดํ๊ณผ");
arr[1].grade = 2.5;
arr[2].number = 21012347;
strcpy(arr[2].name, "๋ฐ์ธ์ข
");
strcpy(arr[2].major, "๋ฐ์ดํฐ์ฌ์ด์ธ์คํ๊ณผ");
arr[2].grade = 4.5;
for(i=0; i<3; i++){
printf("ํ๋ฒ : %d\n", arr[i].number);
printf("์ด๋ฆ : %s\n", arr[i].name);
printf("์ ๊ณต : %s\n", arr[i].major);
printf("ํ์ : %.2f\n", arr[i].grade);
printf("\n");
}
return 0;
}
์คํ๊ฒฐ๊ณผ
ํ๋ฒ : 21012345
์ด๋ฆ : ๊น์ธ์ข
์ ๊ณต : ์ปดํจํฐ๊ณตํ๊ณผ
ํ์ : 3.50
ํ๋ฒ : 21012346
์ด๋ฆ : ์ด์ธ์ข
์ ๊ณต : ์ํํธ์จ์ดํ๊ณผ
ํ์ : 2.50
ํ๋ฒ : 21012347
์ด๋ฆ : ๋ฐ์ธ์ข
์ ๊ณต : ๋ฐ์ดํฐ์ฌ์ด์ธ์คํ๊ณผ
ํ์ : 4.50
๊ตฌ์กฐ์ฒด ๋ฐฐ์ด์ ์ ์ธํ๋ฉด์ ์ด๊ธฐํ ํ๋ ค๋ฉด { } ์ค๊ดํธ ์์ { } ์ค๊ดํธ๋ฅผ ์ฌ์ฉ ํ๋ค.
struct ๊ตฌ์กฐ์ฒด์ด๋ฆ ๋ณ์์ด๋ฆ[ํฌ๊ธฐ] = {{ .๋ฉค๋ฒ์ด๋ฆ1 = ๊ฐ1, .๋ฉค๋ฒ์ด๋ฆ2 = ๊ฐ2 ...},
{ .๋ฉค๋ฒ์ด๋ฆ1 = ๊ฐ3, .๋ฉค๋ฒ์ด๋ฆ2 = ๊ฐ4 ...}
...
};
struct student arr[3] = { { .ํ๋ฒ = 21012345, .์ด๋ฆ = "๊น์ธ์ข
", .์ ๊ณต = "์ปดํจํฐ๊ณตํ๊ณผ", .ํ์ = 3.5 },
{ .ํ๋ฒ = 21012346, .์ด๋ฆ = "์ด์ธ์ข
", .์ ๊ณต = "์ํํธ์จ์ดํ๊ณผ", .ํ์ = 2.5 },
{ .ํ๋ฒ = 21012347, .์ด๋ฆ = "๋ฐ์ธ์ข
", .์ ๊ณต = "๋ฐ์ดํฐ์ฌ์ด์ธ์คํ๊ณผ", .ํ์ = 4.5 } }
struct ๊ตฌ์กฐ์ฒด์ด๋ฆ ๋ณ์์ด๋ฆ[ํฌ๊ธฐ] = { { ๊ฐ1, ๊ฐ2 ... }, { ๊ฐ3, ๊ฐ4 ... }, ... };
struct student arr[3] = { { 21012345, "๊น์ธ์ข
", "์ปดํจํฐ๊ณตํ๊ณผ", 3.5 },
{ 21012346, "์ด์ธ์ข
", "์ํํธ์จ์ดํ๊ณผ", 2.5 },
{ 21012347, "๋ฐ์ธ์ข
", "๋ฐ์ดํฐ์ฌ์ด์ธ์คํ๊ณผ", 4.5 } }
๊ตฌ์กฐ์ฒด์ ํฌ์ธํฐ
ํฌ์ธํฐ ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๊ฐ์ ์ ์ฅํ๋ ๋ณ์์ด๋ค.
๊ตฌ์กฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ๋ผ๊ณ ํ๋ค.
๋ณ์์ด๋ฆ ์์ * ์ ๋ถ์ฌ ์ ์ธ
struct ๊ตฌ์กฐ์ฒด์ด๋ฆ * ๊ตฌ์กฐ์ฒดํฌ์ธํฐ;
๊ตฌ์กฐ์ฒด ํฌ์ธํฐ๋ฅผ ์ด์ฉํ ๊ตฌ์กฐ์ฒด์ ๋ฉค๋ฒ์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ
1. *(์ฐธ์กฐ ์ฐ์ฐ์) ๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ
(*๊ตฌ์กฐ์ฒดํฌ์ธํฐ).๋ฉค๋ฒ๋ณ์์ด๋ฆ
2. ->(ํ์ดํ ์ฐ์ฐ์) ๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ ( ** ๋ ๋ง์ด ์ฌ์ฉ )
๊ตฌ์กฐ์ฒดํฌ์ธํฐ -> ๋ฉค๋ฒ๋ณ์์ด๋ฆ
#include <stdio.h>
struct student
{
int number;
char name[20];
char major[20];
double grade;
};
int main(void)
{
struct student student1 = { 21012345, "๊น์ธ์ข
", "์ปดํจํฐ๊ณตํ๊ณผ", 3.5 };
struct student * ptr = &student1;
printf("ํ๋ฒ : %d\n", (*ptr).number);
printf("์ด๋ฆ : %s\n", (*ptr).name);
printf("์ ๊ณต : %s\n", (*ptr).major);
printf("ํ์ : %.2f\n", (*ptr).grade);
return 0;
}
์คํ๊ฒฐ๊ณผ
ํ๋ฒ : 21012345
์ด๋ฆ : ๊น์ธ์ข
์ ๊ณต : ์ปดํจํฐ๊ณตํ๊ณผ
ํ์ : 3.50
#include <stdio.h>
struct student
{
int number;
char name[20];
char major[20];
double grade;
};
int main(void)
{
struct student student1 = { 21012345, "๊น์ธ์ข
", "์ปดํจํฐ๊ณตํ๊ณผ", 3.5 };
struct student * ptr = &student1;
printf("ํ๋ฒ : %d\n", ptr -> number);
printf("์ด๋ฆ : %s\n", ptr -> name);
printf("์ ๊ณต : %s\n", ptr -> major);
printf("ํ์ : %.2f\n", ptr -> grade);
return 0;
}
์คํ๊ฒฐ๊ณผ
ํ๋ฒ : 21012345
์ด๋ฆ : ๊น์ธ์ข
์ ๊ณต : ์ปดํจํฐ๊ณตํ๊ณผ
ํ์ : 3.50
studentํ ํฌ์ธํฐ ๋ณ์ ptr์ด ๊ตฌ์กฐ์ฒด ๋ณ์ student1์ ๊ฐ๋ฆฌํจ๋ค.
studentํ ํฌ์ธํฐ ๋ณ์ ptr์ ์ด์ฉํด ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์กฐ์ฒด ๋ณ์ student1์ ์ ๊ทผํ๋ค.
typedef
typedef ์ ์ธ ์ ๊ธฐ์กด์ ์กด์ฌํ๋ ์๋ฃํ์ ์ด๋ฆ์ ์ ์ด๋ฆ์ ๋ถ์ฌ ํ๋ค.
typedef ์ ์ธ์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ ์ ์๋ ํ์์ด๋ ์ฌ์ฉ์๊ฐ ์ ์ธํ ํ์์ ๋ํ ๋ณด๋ค ์งง๊ฑฐ๋ ์๋ฏธ ์๋ ์ด๋ฆ์ ์์ฑ ํ ์ ์๋ค.
typedef ๊ธฐ์กด_์๋ฃํ ์๋กญ๊ฒ_์ ์ธํ _์๋ฃํ;
typedef unsigned int myint;
unsigned int num;
// ์ ์ฝ๋์ ์๋ ์ฝ๋๋ ๊ฐ์ ์๋ฏธ์
๋๋ค.
myint num;
typedef๋ฅผ ์ด์ฉํ๋ฉด ๊ตฌ์กฐ์ฒด ๋ณ์๋ฅผ ๋ง๋ค ๋ struct ์ ์ธ์ ์๋ต ํ ์ ์๋ค.
typedef๋ก ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ํ๋ฉด์ ๋ณ์นญ์ ์ง์ ํด ์ฃผ๋ฉด ๋๋ค.
struct student
{
int number;
char name[20];
char major[20];
double grade;
};
๊ตฌ์กฐ์ฒด ๋ณ์๋ฅผ ์ ์ธ๊ณผ ์ด๊ธฐํํด์ผ ํ๋ค.
struct student student1 = { 21012345, "๊น์ธ์ข
", "์ปดํจํฐ๊ณตํ๊ณผ", 3.5 };
typedef ์ ์ธ์ ํตํด struct student๋ฅผ ๋์ ํ ์ ์๋๋ก Student๋ผ๋ ์ด๋ฆ์ ์ ์ํ ์ ์๋ค.
typedef struct student Student;
struct ์ ์ธ์ ์๋ตํ๊ณ ๊ตฌ์กฐ์ฒด ๋ณ์ ์ ์ธ๊ณผ ์ด๊ธฐํ๋ฅผ ํ ์ ์๋ค.
Student student1 = { 21012345, "๊น์ธ์ข
", "์ปดํจํฐ๊ณตํ๊ณผ", 3.5 };
typedef๋ก ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ํ๋ฉด์ ๋ณ์นญ์ ์ง์
typedef struct ๊ตฌ์กฐ์ฒด์ด๋ฆ { ๋ฉค๋ฒ๋ณ์1์๋ฃํ ๋ฉค๋ฒ๋ณ์1์ด๋ฆ; ๋ฉค๋ฒ๋ณ์2์๋ฃํ ๋ฉค๋ฒ๋ณ์2์ด๋ฆ; ๋ฉค๋ฒ๋ณ์3์๋ฃํ ๋ฉค๋ฒ๋ณ์3์ด๋ฆ; ... } ๊ตฌ์กฐ์ฒด๋ณ์นญ;
๊ตฌ์กฐ์ฒด ์ด๋ฆ ์๋ตํ๋ ๋ฐฉ๋ฒ๋ ์๋ค. ๋จ, ์ค๋ฅธ์ชฝ๊ณผ ๊ฐ์ด ๊ตฌ์กฐ์ฒด์ ์ด๋ฆ์ ์๋ตํ๋ฉด struct ์ ์ธ์ ์ถ๊ฐํ๋ฉด์ ๋ณ์๋ฅผ ์ ์ธํ ์ ์๋ค.
Student student1; // ๊ฐ๋ฅํ ์ ์ธ struct student student1; // ๋ถ๊ฐ๋ฅํ ์ ์ธ
๊ณต์ฉ์ฒด
๊ณต์ฉ์ฒด ๋ union ํค์๋ ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธํ๋ฉฐ, ๊ตฌ์กฐ์ฒด์ ๋น์ทํ๋ค.
๋ชจ๋ ๋ฉค๋ฒ ๋ณ์๊ฐ ํ๋์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ '๊ณต์ ' ํ๋ค๋ ์ ๋ง์ด ๋ค๋ฅด๋ค.
๋ชจ๋ ๋ฉค๋ฒ ๋ณ์๊ฐ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ๋ฏ๋ก, ๊ณต์ฉ์ฒด๋ ํ ๋ฒ์ ํ๋์ ๋ฉค๋ฒ ๋ณ์๋ง ์ฌ์ฉ ํ ์ ์๋ค.
๊ณต์ฉ์ฒด๋ฅผ ์ ์ํ๋ ๋ฐฉ๋ฒ์ ํค์๋ struct ๋์ union์ ์ฌ์ฉ ํ๋ ๊ฒ์ด๋ค.
union ๊ณต์ฉ์ฒด์ด๋ฆ { ๋ฉค๋ฒ๋ณ์1์๋ฃํ ๋ฉค๋ฒ๋ณ์1์ด๋ฆ; ๋ฉค๋ฒ๋ณ์2์๋ฃํ ๋ฉค๋ฒ๋ณ์2์ด๋ฆ; ... };
#include <stdio.h>
typedef struct snum // ๊ตฌ์กฐ์ฒด ์ ์ธ
{
int a;
int b;
double c;
} Snum;
typedef union unum // ๊ณต์ฉ์ฒด ์ ์ธ
{
int a;
int b;
double c;
} Unum;
int main(void)
{
Snum sn;
Unum un;
printf("%p %p %p\n", &sn.a, &sn.b, &sn.c);
printf("%p %p %p\n", &un.a, &un.b, &un.c);
printf("%d %d\n", sizeof(Snum), sizeof(Unum));
return 0;
}
์คํ๊ฒฐ๊ณผ
00DBFE50 00DBFE54 00DBFE58
00DBFE40 00DBFE40 00DBFE40
16 8
โถ Snumํ ๋ณ์๋ฅผ ๊ตฌ์ฑํ๋ ๋ฉค๋ฒ๋ค์ ์ฃผ์๊ฐ์ ๋ค๋ฅธ๋ฐ Unumํ ๋ณ์๋ฅผ ๊ตฌ์ฑํ๋ ๋ฉค๋ฒ๋ค์ ์ฃผ์๊ฐ์ ๋์ผํ๋ค๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
sizeof ์ฐ์ฐ์ ๋ก ์๋ฃํ์ ํฌ๊ธฐ๋ฅผ ๊ตฌํ๋ฉด 16๊ณผ 8์ด ์ถ๋ ฅ๋๋ค.
int๋ 4๋ฐ์ดํธ, double์ 8๋ฐ์ดํธ ์ด๋ค.
์ฌ๊ธฐ์ 16์ธ ๋ชจ๋ ๋ฉค๋ฒ ํฌ๊ธฐ๋ฅผ ํฉํ ๊ฒฐ๊ณผ 16์ด๊ณ , 8์ ๋ฉค๋ฒ์ค์์๊ฐ์ฅ ํฌ๊ธฐ๊ฐ ํฐ double์ ํฌ๊ธฐ๋ง ๊ณ์ฐ๋ ๊ฒฐ๊ณผ์ด๋ค.
#include <stdio.h>
typedef union unum // ๊ณต์ฉ์ฒด ์ ์ธ
{
int a;
int b;
double c;
} Unum;
int main(void)
{
Unum un; // 8๋ฐ์ดํธ ๋ฉ๋ชจ๋ฆฌ ํ ๋น
un.a = 10;
printf("%d\n", un.b); // b ๋ฉค๋ฒ ์ถ๋ ฅ
un.c = 11.1; // c ๋ฉค๋ฒ์ ๊ฐ ๋์
printf("%d\n", un.a); // a ๋ฉค๋ฒ ์ถ๋ ฅ
printf("%d\n", un.b); // b ๋ฉค๋ฒ ์ถ๋ ฅ
printf("%f\n", un.c); // c ๋ฉค๋ฒ ์ถ๋ ฅ
return 0;
}
์คํ๊ฒฐ๊ณผ
10
858993459
858993459
11.100000
โถ ์ฒ์์ a(์์ 4๋ฐ์ดํธ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ)์ 10์ ์ ์ฅํ๋ค.
b๋ intํ ๋ณ์์ด๋ฏ๋ก b ๋ฉค๋ฒ์ ์ ๊ทผํ ๊ฒฝ์ฐ ์์ 4๋ฐ์ดํธ์ ๊ณต๊ฐ์ ์ฐธ์กฐ ํ๊ฒ ๋๋ค.
๊ทธ๋ฐ๋ฐ ์์ ์ด ๊ณต๊ฐ์ 10์ ์ ์ฅํ์ผ๋ฏ๋ก 10์ด ์ถ๋ ฅ ๋๋ค.
c์ ์ค์๋ฅผ ์ ์ฅํจ์ผ๋ก์จ ๊ฒฐ๊ณผ์ ์ผ๋ก ์์ 4๋ฐ์ดํธ์ ์ ์ฅ๋ ๊ฐ์ ๋ฎ์ด ์จ๋ฒ๋ฆฐ๋ค.
์ค์๋ฅผ ์ ์ฅํ๋ฉด์ ๋ฎ์ด์จ๋ฒ๋ ธ๊ธฐ ๋๋ฌธ์, a, b(์์ 4๋ฐ์ดํธ)๋ฅผ ์ฝ์ด์ ์ถ๋ ฅํ๋ฉด ์ ์ ์๋ ๊ฐ์ด ์ถ๋ ฅ๋๋ค.
๊ตฌ์กฐ์ฒด(struct)
๊ณต์ฉ์ฒด(union)
๋ฉ๋ชจ๋ฆฌ
๊ตฌ์กฐ์ฒด์ ๊ฐ๊ฐ์ ๋ฉค๋ฒ๋ค์ ๋ชจ๋ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๋ฅผ ๊ฐ์ต๋๋ค. ๋ฐ๋ผ์ ๊ฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์์ ์ฃผ์๊ฐ ๋ค๋ฆ
๋๋ค.
๊ณต์ฉ์ฒด์ ๋ชจ๋ ๋ฉค๋ฒ๋ค์ ๋ชจ๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํฉ๋๋ค. ๋ฐ๋ผ์ ๊ฐ๊ฐ์ ๋ฉค๋ฒ๋ค์ ์์ ์ฃผ์๊ฐ ๋ชจ๋ ๋์ผ ํฉ๋๋ค.
์ด๊ธฐํ
๊ตฌ์กฐ์ฒด ๋ฉค๋ฒ๋ค์ ํ ๋ฒ์ ์ด๊ธฐํ ํ ์ ์์ต๋๋ค.
๊ณต์ฉ์ฒด์ ์ด๊ธฐํ๋ ์ฒซ ๋ฒ์งธ ๋ฉค๋ฒ์์๋ง ์ด๊ธฐํ ๋ฅผ ํ ์ ์์ต๋๋ค.์ฒซ๋ฒ์งธ ๋ฉค๋ฒ๊ฐ ์๋ ๋ฉค๋ฒ๋ฅผ ์ด๊ธฐํํ ๋๋ .(๋ฉค๋ฒ ์ ๊ทผ ์ฐ์ฐ์)๋ก ๋ฉค๋ฒ๋ฅผ ์ง์ ์ง์ ํด์ผ ํฉ๋๋ค.
์ ์ฒด ํฌ๊ธฐ
๋ชจ๋ ๊ตฌ์กฐ์ฒด ๋ฉค๋ฒ ํฌ๊ธฐ์ ํฉ ์
๋๋ค.
๊ฐ์ฅ ํฐ ๋ฉค๋ฒ์ ํฌ๊ธฐ ์
๋๋ค.
์ ๊ทผ
๊ตฌ์กฐ์ฒด์ ๋ชจ๋ ๋ฉค๋ฒ์ ์ ๊ทผ ํ ์ ์์ต๋๋ค.
ํ๋์ ๋ฉค๋ฒ์๋ง ์ ๊ทผ ํ ์ ์์ต๋๋ค.
์ด๊ฑฐํ
์ด๊ฑฐํ ์ enum ํค์๋ ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธํ๋ค.
enum eration์ ์ฝ์๋ก์, ์ด๊ฑฐํ๋ค๋ ์๋ฏธ ๋ฅผ ๊ฐ์ง๋ค.
์ด๊ธฐํ๋ฅผ ํ์ง ์์ผ๋ฉด ์ด๊ฑฐ๋ ์์์ ๋ฐ๋ผ 0๋ถํฐ ์ฐจ๋ก๋๋ก ์ฆ๊ฐ ํ๋ค
enum ์ด๊ฑฐํ์ด๋ฆ { ์์๋ช
1, ์์๋ช
2, ... };
enum days_of_week
{
mon, tue, wed, thu, fri, sat, sun // ์ด๊ฑฐํ ์ ์ธ
};
์์ ๊ฐ์ ํํ์ด๋ฉด mon์ 0, tue๋ 1, wed๋ 2, thu๋ 3, fri๋ 4, sat๋ 5, sun๋ 6
enum days_of_week
{
mon=3, tue, wed, thu=50, fri, sat, sun // ์ด๊ฑฐํ ์ ์ธ
};
์์ ๊ฐ์ ํํ์ด๋ฉด mon๋ 3, tue๋ 4, wed๋ 5, thu๋ 50, fri๋ 51, sat๋ 52, sun๋ 53
์ ์๋ ์ด๊ฑฐํ์ ๋ค์๊ณผ ๊ฐ์ด ์ด๊ฑฐํ ๋ณ์๋ก ์ ์ธํ์ฌ ์ฌ์ฉ ํ ์ ์๋ค.
์ด๊ฑฐํ ๋ณ์๋ intํ๊ณผ ๊ฐ์ ํฌ๊ธฐ๋ก ์ ์๋ฅผ ์ ์ฅํ ์ ์๋ ๊ณต๊ฐ์ด ํ ๋น ๋๋ค.
๋ํ ์ด๊ฑฐํ ๋ฉค๋ฒ๋ฅผ ์ ์ฅํ๋ ์ฉ๋๋ก ์ฐ์ธ๋ค.
enum ์ด๊ฑฐํ์ด๋ฆ ์ด๊ฑฐํ๋ณ์์ด๋ฆ; enum days_of_week day; // ์ด๊ฑฐํ ๋ณ์ ์ ์ธ
#include <stdio.h>
enum days_of_week
{
mon, tue, wed, thu, fri, sad, sun // ์ด๊ฑฐํ ์ ์ธ
};
int main(void)
{
enum days_of_week day; // ์ด๊ฑฐํ ๋ณ์ ์ ์ธ
day = fri; // ์ด๊ฑฐ ๋ฉค๋ฒ์ ๊ฐ ๋์
switch (day) // ์ด๊ฑฐ ๋ฉค๋ฒ ํ๋จ
{
case mon:
printf("Hate Monday\n");
break;
case tue:
printf("Annoy Tuesday\n");
break;
case wed:
printf("Ignore Wednesday\n");
break;
case thu:
printf("Smile Thursday\n");
break;
case fri:
printf("Love Friday\n");
break;
case sat:
printf("Enjoy Saturday\n");
break;
case sun:
printf("Lazy Sunday\n");
break;
}
return 0;
}
์คํ๊ฒฐ๊ณผ
Love Friday
โถ ์์ชฝ ์์ ์ case ๋ ์ด๋ธ์์ ์ฌ์ฉํ ์์ mon, tue, wed...๋ฅผ ๋์ ํด์ 0,1,2...๋ฅผ ์ฝ์
ํด๋ ๊ฒฐ๊ณผ๋ ๋์ผ ํ๋ค.
mon, tue, wed... ๊ฐ์ ์ด๊ฑฐํ ์์๋ intํ์ผ๋ก ํํ๋๋ ์์ ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๊ฑฐํ ๋ฉค๋ฒ๋ ์ฌ์ค ์ ์ ์์๋ฅผ ์จ์ ์์ฑํ ์ ์๋ค.
๊ทธ๋ฌ๋ ์ด๊ฑฐํ์ ์ ์ํ๋ฉด ์์ผ ์ด๋ฆ์ ์ง์ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ํจ์ฌ ์ฝ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ๋ง๋ค ์ ์๋ค.
โ
struct์ ๋ง์ฐฌ๊ฐ์ง๋ก, typedef๋ฅผ ์ฌ์ฉํ์ฌ enum ํค์๋๋ฅผ ์๋ตํ ์ ์๋ค.
์ถ์ฒ: https://sejong-kr.libguides.com/c.php?g=942235&p=6822369