์ง๋๋ฒ์๋ ๊ตฌ์กฐ์ฒด๋ ๋ฌด์์ด๋ฉฐ, ์์ฌ์ฉํ๋์ง์ ๋ํด ์์๋ดค์ต๋๋ค. ์ด๋ฒ์๋ ๊ทธ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์์ ์ฝ๋ ํตํด ๊ตฌ์กฐ์ฒด์ ์ง์ ์ ๊ทผ๊ณผ ๊ฐ์ ์ ๊ทผ(ํฌ์ธํฐ ์ฌ์ฉ) ๋ฐฉ๋ฒ์ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.๐
2025.01.18 - [C์ธ์ด] - [C์ธ์ด] ๊ตฌ์กฐ์ฒด๋ ๋ฌด์์ด๊ณ ์ ์ฌ์ฉํ๋ ๊ฑธ๊น?
1. ๊ตฌ์กฐ์ฒด ์ ์ธํ๊ธฐ - ๋ฐ์ดํฐ๋ฅผ ํ๋๋ก ๋ฌถ์ด๋ณด์!
C์ธ์ด์์ ๊ตฌ์กฐ์ฒด(struct)๋ ์ฌ๋ฌ ๊ฐ์ ๋ณ์๋ฅผ ํ๋์ ๋จ์๋ก ๋ฌถ์ ์ ์๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ํ์ ์ ๋ณด๋ฅผ ์ ์ฅํด์ผ ํ๋ค๋ฉด ์ด๋ฆ, ๋์ด, ํค ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ๊ด๋ฆฌํ๋ ๋์ ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ฉด ํ ๋ฒ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
๐ ๊ตฌ์กฐ์ฒด ์ ์ธ ๋ฐฉ๋ฒ
struct student
{
char name[10];
int age;
int height;
}
์ด๋ ๊ฒ ์ ์ธํ๋ฉด student ๋ผ๋ ๊ตฌ์กฐ์ฒด ํ์ ์ด ์ ์๋ฉ๋๋ค. ํ์ง๋ง ์ค์ ๋ณ์๋ฅผ ๋ง๋ค๋ ค๋ฉด ๊ตฌ์กฐ์ฒด ๋ณ์๋ฅผ ์ ์ธํด์ผ ํฉ๋๋ค.
๐ ๊ตฌ์กฐ์ฒด ๋ณ์ ์ ์ธ
struct student st1;
struct student st2;
๋๋ ์๋์ฒ๋ผ ํ ๋ฒ์ ์ ์ธํ ์๋ ์์ต๋๋ค.
struct student
{
char name[10];
int age;
int height;
} st1, st2;
์ด์ st1, st2 ๋ผ๋ ๊ตฌ์กฐ์ฒด ๋ณ์๊ฐ ๊ฐ๊ฐ 18๋ฐ์ดํธ(10 + 4 + 4)๋ฅผ ์ฐจ์งํ๋ฉฐ, ๋ด๋ถ ๋ฉค๋ฒ์ธ name, age, height๋ฅผ ํตํด ์ ๊ทผํ ์ ์์ต๋๋ค.
2. ๊ตฌ์กฐ์ฒด ๋ฉค๋ฒ์ ์ ๊ทผํ๊ธฐ - ์ (.)์ ์ฐ์ด๋ณด์
๊ตฌ์กฐ์ฒด ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด .(์ ) ์ฐ์ฐ์๋ฅผ ์ด์ฉํด ๋ฉค๋ฒ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
๐ฏ ๋ฉค๋ฒ ์ ๊ทผ ๋ฌธ๋ฒ
๊ตฌ์กฐ์ฒด๋ณ์๋ช
.๊ตฌ์กฐ์ฒด๋ฉค๋ฒ๋ช
;
๐ ์์ ์ฝ๋
struct student
{
char name[10];
int age;
int height;
} st1, st2;
int main() {
st1.age = 25;
st1.height = 167;
strcpy(st1.name, "Hyonie");
printf("์ด๋ฆ: %s ๋์ด: %d, ํค: %d\n", st1.name, st1.age, st1.height);
return 0;
}
๐ ๏ธ ์ถ๋ ฅ ๊ฒฐ๊ณผ
์ด๋ฆ: Hyonie ๋์ด: 25, ํค: 167
๊ตฌ์กฐ์ฒด ๋ฉค๋ฒ์ ์ ๊ทผํ ๋ (.) ์ ์ฌ์ฉํ๋ ๊ฒ์ ์ง์ ์ ๊ทผ ์ด๋ผ๊ณ ํฉ๋๋ค.
๐ ๊ตฌ์กฐ์ฒด ๋ฉค๋ฒ ์ ๊ทผ
3. ํฌ์ธํฐ๋ฅผ ์ด์ฉํ ๊ตฌ์กฐ์ฒด ์ ๊ทผ - ํ์ดํ(->)
๊ตฌ์กฐ์ฒด๋ฅผ ํฌ์ธํฐ๋ก ์ฌ์ฉํ๋ฉด ๊ฐ์ ์ ๊ทผ ๋ฐฉ์์ด ํ์ํฉ๋๋ค.
๐ฏ ํฌ์ธํฐ๋ก ๊ตฌ์กฐ์ฒด ๋ฉค๋ฒ ์ ๊ทผ
๊ตฌ์กฐ์ฒด ๋ณ์๋ฅผ ํฌ์ธํฐ๋ก ์ฌ์ฉํ๊ฒ ๋๋ฉด ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌ์ผ์ผ ํ ๋์์ด ์์ด์ผํฉ๋๋ค.
struct student st; // ๊ตฌ์กฐ์ฒด ๋ณ์ ์ ์ธ
struct student *pSt; // ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ ์ ์ธ
pSt = &st; // ๊ตฌ์กฐ์ฒด ๋ณ์์ ์ฃผ์๋ฅผ ํฌ์ธํฐ์ ์ ์ฅ
์ด์ pSt๋ st์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ฉฐ, pSt -> name, pSt -> age, pSt -> height ๋ฅผ ์ด์ฉํด ๋ฉค๋ฒ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
๐ ์์ ์ฝ๋
struct student
{
char name[10];
int age;
int height;
} st, *pSt;
int main() {
pSt = &st;
strcpy(pSt -> name, "Hyonie");
pSt->age = 25;
pSt->height = 167;
printf("์ด๋ฆ: %s ๋์ด: %d, ํค: %d\n", pSt -> name, pSt->age, pSt -> height);
return 0;
}
ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ->(ํ์ดํ ์ฐ์ฐ์)๋ฅผ ์ด์ฉํ์ฌ ๋ฉค๋ฒ์ ์ ๊ทผํฉ๋๋ค. pSt -> name ์ (*pSt).name; ๊ณผ ๊ฐ์ ์๋ฏธ์ ๋๋ค.
๐ ๏ธ ์ถ๋ ฅ ๊ฒฐ๊ณผ
์ด๋ฆ: Hyonie ๋์ด: 25, ํค: 167
๐ ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ ์ ๊ทผ
4. ๊ตฌ์กฐ์ฒด ๋ณ์ ์ด๊ธฐํ ํ๊ธฐ - ์ฒ์๋ถํฐ ๊ฐ์ ๋ฃ์ด๋ณด์
๊ตฌ์กฐ์ฒด ๋ณ์๋ ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํํ ์ ์์ต๋๋ค.
๐ฏ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํ
struct student
{
char name[10];
int age;
int height;
} st = { "Hyonie", 25, 167 };
๊ตฌ์กฐ์ฒด๋ ์ฌ์ฉ์ ์ ์ ํ์ ์ ๋๋ค. ์ ์์ ์์๋ student๋ผ๋ ๊ตฌ์กฐ์ฒด ํ์ ์ ์ ์ํ๊ณ , name, age, height ์ด 3๊ฐ์ ๋ฉค๋ฒ๋ฅผ ํฌํจํ๊ณ ์์ต๋๋ค. ๋ํ, student ํ์ ์ ๋ณ์ st๋ฅผ ์ ์ธํ์ต๋๋ค.
student st = 0; // โ ์ฌ๋ฐ๋ฅด์ง ์์ ์ฝ๋
์ ์ฝ๋๋ ์๋ชป๋ ์ด๊ธฐ ๋ฐฉ์์ ๋๋ค. student๋ ๊ตฌ์กฐ์ฒด ํ์ ์ด๋ฏ๋ก, ์ด๊ธฐํํ ๋ ๊ฐ๊ฐ์ ๋ฉค๋ฒ์ ๊ฐ์ ํ๋์ฉ ์ง์ ํด ์ฃผ์ด์ผํฉ๋๋ค.
โ ์ฌ๋ฐ๋ฅธ ์ด๊ธฐํ ๋ฐฉ๋ฒ
struct student st = {"hyonie", 25, 167};
์ด๋ ๊ฒ ํ๋ฉด st ๊ตฌ์กฐ์ฒด ๋ณ์์ name์ "Hyonie", age์ 25, height์ 167์ด ์ ์ฅ๋ฉ๋๋ค.
๊ตฌ์กฐ์ฒด ๋ณ์๋ ํ๋์ ๋จ์ผ ๊ฐ์ด ์๋๋ผ ์ฌ๋ฌ๊ฐ์ ๋ฉค๋ฒ ๋ณ์๋ฅผ ํฌํจํ๋ ๋ณตํฉ ๋ฐ์ดํฐ ํ์ ์ด๋ฏ๋ก, ๋ฐ๋์ {}๋ฅผ ์ฌ์ฉํด ์ด๊ธฐํํด์ผํฉ๋๋ค.
๐ ์ด๊ธฐํ ์์ ์ฝ๋
struct student
{
char name[10];
int age;
int height;
} st = { "Hyonie", 25, 167 };
int main() {
printf("์ด๋ฆ: %s ๋์ด: %d, ํค: %d\n", st.name, st.age, st.height);
return 0;
}
๊ตฌ์กฐ์ฒด๋ ๊ฒฐ๊ตญ ํ์ ์ด๋ฉฐ, ๊ตฌ์กฐ์ฒด ๋ณ์๋ฅผ ์ ์ธํ๋ฉด ๋ฐ๋์ ์ด๊ธฐํํด์ผ ํฉ๋๋ค. ํนํ ์ฌ๋ฌ ๊ฐ์ ๋ณ์๋ฅผ ํฌํจํ๊ณ ์๊ธฐ ๋๋ฌธ์ {} ๋ฅผ ์ด์ฉํ์ฌ ํ ๋ฒ์ ์ด๊ธฐํ ํ ์ ์์ต๋๋ค.
5. ์ค์ต ๋ฌธ์ - ๋ฌผ๊ฑด ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ ๐ฆ
์ฐ์ฒด๊ตญ์์ ๋ฌผ๊ฑด์ ๋ณด๋ผ ๋ ์ด๋ฆ, ๋์ด, ๋ฌด๊ฒ ๊ฐ์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ ๊ตฌ์กฐ์ฒด๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค. ์ฌ์ฉ์๋ก๋ถํฐ ์ ๋ณด๋ฅผ ์ ๋ ฅ๋ฐ์ ๊ตฌ์กฐ์ฒด ๋ฉค๋ฒ์ ์ ์ฅํ๊ณ , ์ ๋ ฅํ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํฉ๋๋ค.
1๏ธโฃ ๊ตฌ์กฐ์ฒด ์ค๊ณํ๊ธฐ
object๋ผ๋ ๊ตฌ์กฐ์ฒด๋ฅผ ๋ง๋ค๊ณ , ์๋ ์ธ ๊ฐ์ง ๋ฉค๋ฒ๋ฅผ ํฌํจํ ๊ฒ์ ๋๋ค.
- name(์ด๋ฆ)
- height(๋์ด)
- weight(๋ฌด๊ฒ)
๐ ๊ตฌ์กฐ์ฒด ์ ์ธ
struct object
{
char name[10]; // ๋ฌผ๊ฑด์ ์ด๋ฆ (๋ฌธ์์ด)
int height; // ๋ฌผ๊ฑด์ ๋์ด (์ ์)
int weight; // ๋ฌผ๊ฑด์ ๋ฌด๊ฒ (์ ์)
};
2๏ธโฃ ์ฌ์ฉ์ ์ ๋ ฅ์ ๋ฐ์ ๊ตฌ์กฐ์ฒด ํ์ฉํ๊ธฐ
์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ด๋ฆ, ๋์ด, ๋ฌด๊ฒ ์ ๋ณด๋ฅผ ๊ตฌ์กฐ์ฒด ๋ณ์์ ์ ์ฅํ ํ ์ถ๋ ฅํฉ๋๋ค.
๐์ ์ฒด ์ฝ๋
/*
์ฐ๋ฆฌ๊ฐ ์ฐ์ฒด๊ตญ์์ ๋ฌผ๊ฑด์ ์ด๋๋ก ๊ฐ ๋ณด๋ผ ๋,
๋ฌผ๊ฑด์ ์ข
๋ฅ, ๋ฌด๊ฒ, ๋์ด ๋ฑ์ ์ ๋ณด๋ฅผ ์
๋ ฅ
์ฐ๋ฆฌ๋ ์ด๋ฌํ ์ ๋ณด๋ค์ ๊ฐ๊ณ ์๋ ๋ฌผ๊ฑด์ ๋ํ ๊ตฌ์กฐ์ฒด๋ฅผ ๋ง๋ค์ด๋ณด์.
๊ตฌ์กฐ์ฒด ์ด๋ฆ์ object ๋ผ๊ณ ํ๊ณ ,
๊ตฌ์กฐ์ฒด ๋ฉค๋ฒ๋ก๋ ์ด๋ฆ(name), ๋์ด(height), ๋ฌด๊ฒ(weight)๋ฅผ ๊ฐ๋๋ค.
๊ตฌ์กฐ์ฒด ๋ณ์๋ฅผ ํ๋ ์ ์ธํ๊ณ ,
๊ตฌ์กฐ์ฒด ๋ณ์๋ฅผ ํตํด ๊ฐ๊ฐ์ ๋ฉค๋ฒ์ ๊ฐ์ ๋์
๋์
ํ๋ ๊ฐ์ ์ฌ์ฉ์๋ก๋ถํฐ ์
๋ ฅ ๋ฐ์ผ๋ฉฐ,
์
๋ ฅ์ด ๋๋๋ฉด ๋์
ํ ๋ฉค๋ฒ์ ๊ฐ์ ํ๋ฉด์ ์ถ๋ ฅํ๋๋ก ํ๋ก๊ทธ๋จ์ ์์ฑ
*/
struct object
{
char name[10];
int height;
int weight;
};
void main()
{
object item;
printf("๋ฌผ๊ฑด์ ์ด๋ฆ : ");
//strcpy_s(item.name, sizeof(item.name), "");
scanf_s("%s",item.name,sizeof(item.name));
printf("๋ฌผ๊ฑด์ ๋์ด(cm) : ");
scanf_s("%d", &item.height);
printf("๋ฌผ๊ฑด์ ๋ฌด๊ฒ(kg) : ");
scanf_s("%d", &item.weight);
printf("๋ณด๋ผ ๋ฌผ๊ฑด์ ์ ๋ณด : %s,%dcm,%dkg ", item.name, item.height, item.weight);
}
โ๏ธ scanf_s("%9s", item.name, (unsigned)sizeof(item.name));
๐ scanf_s๋ฅผ ์ฌ์ฉํ ๋ ๋ฌธ์์ด ํฌ๊ธฐ๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค. %9s๋ ์ต๋ 9๊ธ์๊น์ง ์ ๋ ฅ ๊ฐ๋ฅํ๋๋ก ์ค์ ํฉ๋๋ค.(๋ฌธ์์ด ํฌ๊ธฐ๊ฐ 10์ด๋ฏ๋ก ๋ง์ง๋ง์๋ \0(Null๋ฌธ์) ํฌํจ)
๐ ๏ธ ์ถ๋ ฅ ๊ฒฐ๊ณผ
๋ฌผ๊ฑด์ ์ด๋ฆ : ๋ฐ์ค
๋ฌผ๊ฑด์ ๋์ด(cm) : 30
๋ฌผ๊ฑด์ ๋ฌด๊ฒ(kg) : 5
๋ณด๋ผ ๋ฌผ๊ฑด์ ์ ๋ณด : ๋ฐ์ค,30cm,5kg
6. ๋ง๋ฌด๋ฆฌ
๊ตฌ์กฐ์ฒด๋ฅผ ํ์ฉํ์ฌ ์ฐ์ฒด๊ตญ์์ ๋ฌผ๊ฑด ์ ๋ณด๋ฅผ ์ ๋ ฅํ๊ณ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํด ๋ณด์์ต๋๋ค. ๊ตฌ์กฐ์ฒด๋ฅผ ์ด์ฉํ๋ฉด ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋จ์๋ก ๋ฌถ์ ์ ์์ด ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ํนํ ํฌ์ธํฐ์ ํจ๊ป ์ฌ์ฉํ๋ฉด ๋์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ์๋ ์์ต๋๋ค. ์ง๊ธ ๊น์ง์ ๋ด์ฉ์ ๋ค์ ํ ๋ฒ ์ ๋ฆฌํ๋ฉด:
- struct ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ๊ฐ์ ๋ณ์๋ฅผ ํ ๋ฒ์ ๊ด๋ฆฌํ ์ ์๋ค.
- .์ ์ฌ์ฉํ์ฌ ๋ฉค๋ฒ์ ์ง์ ์ ๊ทผํ ์ ์๋ค.
- ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ->์ ์ด์ฉํด ๊ฐ์ ์ ๊ทผํ ์ ์๋ค.
- {}๋ฅผ ์ด์ฉํด ํ ๋ฒ์ ์ด๊ธฐํํ ์ ์๋ค.
์ด์ ๊ตฌ์กฐ์ฒด๋ฅผ ์์ ๋กญ๊ฒ ํ์ฉ ํ ์ ์๊ฒ ์ฃ ? ๐
'C์ธ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C์ธ์ด] ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น malloc๊ณผ ์ฌํ ๋น realloc (0) | 2025.02.23 |
---|---|
[C์ธ์ด] ๊ตฌ์กฐ์ฒด๋ ๋ฌด์์ด๊ณ ์ ์ฌ์ฉํ๋ ๊ฑธ๊น? (0) | 2025.01.18 |
[C์ธ์ด] ํจ์ ํฌ์ธํฐ ์ ์ธ๊ณผ ํ์ฉ (3) | 2025.01.12 |
[C์ธ์ด] void๋ ์๋ฃํ์ผ๊น? (1) | 2025.01.04 |
[C์ธ์ด] *ํฌ์ธํฐ์ **ํฌ์ธํฐ ์ด์คํฌ์ธํฐ ๊ฐ๋ (1) | 2025.01.02 |