๊ตฌ์กฐ์ฒด
- ๊ตฌ์กฐ์ฒด๋ ํ๋ ์ด์์ ๋ณ์(ํฌ์ธํฐ ๋ณ์, ๋ฐฐ์ด ํฌํจ)๋ฅผ ํ๋๋ก ๋ฌถ์ ์ ์๋ ๋ณตํฉ ์๋ฃํ์ผ๋ก, ๋ค์ํ ํํ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉํ๋ค.
- ๊ธฐ๋ณธ ์๋ฃํ ๋ณ์๋ฅผ ๋ฌถ์ด์ ์๋ก์ด ์๋ฃํ์ ๋ง๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ '์ฌ์ฉ์ ์ ์ ์๋ฃํ'์ด๋ผ๊ณ ํ๋ค.
- 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 ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธํ๋ค.
- enumeration์ ์ฝ์๋ก์, ์ด๊ฑฐํ๋ค๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค.
- ์ด๊ธฐํ๋ฅผ ํ์ง ์์ผ๋ฉด ์ด๊ฑฐ๋ ์์์ ๋ฐ๋ผ 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
'ํ๋ก๊ทธ๋๋ฐ > C์ธ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ์ผ ์ ์ถ๋ ฅ (0) | 2024.08.29 |
---|---|
ํฌ์ธํฐ & ํจ์ (0) | 2024.08.16 |
ํฌ์ธํฐ & ๋ฐฐ์ด (0) | 2024.08.16 |
ํฌ์ธํฐ (0) | 2024.08.15 |
๋ฐฐ์ด (0) | 2024.08.14 |