////
Search
๐Ÿ”ค

C์–ธ์–ด

๋ฌธ์ œ ํ’€์ด
์ฑ•ํ„ฐ 28 : ๊ตฌ์กฐ์ฒด
// ๋ฌธ์ œ : ๊ตฌ์กฐ์ฒด๋ฅผ ๋„์ž…ํ•ด์„œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐ”๊ฟ”์ฃผ์„ธ์š”. #include "stdio.h" typedef struct person { int age; char* name; char* hometown; char* favorite_food; } Person; void introduce(Person person); void talk(Person person); int main() { Person person1; person1.age = 20; person1.name = "ํ™๊ธธ๋™"; person1.hometown = "ํ•œ์–‘"; person1.favorite_food = "๋–ก๋ณถ์ด"; Person person2; person2.age = 50; person2.name = "์ž„๊บฝ์ •"; person2.hometown = "ํ‰์–‘"; person2.favorite_food = "๋–ก๊ตญ"; introduce(person1); talk(person1); introduce(person2); talk(person2); return 0; } void introduce(Person person) { printf("== ์†Œ๊ฐœ ์‹œ์ž‘ ==\n"); printf("์ด๋ฆ„ : %s\n", person.name); printf("๋‚˜์ด : %d์‚ด\n", person.age); printf("๊ณ ํ–ฅ : %s\n", person.hometown); printf("== ์†Œ๊ฐœ ๋ ==\n"); } void talk(Person person) { printf("์ด์•ผ๊ธฐ ์‹œ์ž‘ : ์•ˆ๋…•ํ•˜์„ธ์š”. ์ €๋Š” %d์‚ด, %s ์ž…๋‹ˆ๋‹ค. ์ œ ๊ณ ํ–ฅ์ธ %s ์—์„œ๋Š”...\n", person.age, person.name, person.hometown); }
C
๋ณต์‚ฌ
// ๋ฌธ์ œ : ๊ตฌ์กฐ์ฒด ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ์ด์šฉํ•ด์„œ ์›๋ณธ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด์ฃผ์„ธ์š”. // ์กฐ๊ฑด : ์•„๋ž˜์™€ ๊ฐ™์ด ์ถœ๋ ฅํ•˜๊ฒŒ ํ•ด์ฃผ์„ธ์š”. #include <stdio.h> struct School { char* name; int birth_date; }; // ์ด ํ•จ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. void change(struct School* s) { (*s).name = "๋ฏธ๊ตญ์ดˆ๋“ฑํ•™๊ต"; (*s).birth_date = 20180717; } int main(void) { // ํžŒํŠธ // int => ํƒ€์ž… // temp => ๋ณ€์ˆ˜๋ช… int temp; // struct School => ํƒ€์ž… // s1 => ๋ณ€์ˆ˜๋ช… struct School s1; s1.name = "ํ•œ๊ตญ์ดˆ๋“ฑํ•™๊ต"; s1.birth_date = 19860404; printf("ํ•™๊ต์˜ ์ด๋ฆ„ : %s\n", s1.name); // ์ถœ๋ ฅ => ํ•™๊ต์˜ ์ด๋ฆ„ : ํ•œ๊ตญ์ดˆ๋“ฑํ•™๊ต printf("ํ•™๊ต์˜ ์„ค๋ฆฝ์ผ : %d\n", s1.birth_date); // ์ถœ๋ ฅ => ํ•™๊ต์˜ ์„ค๋ฆฝ์ผ : 19860404 change(&s1); // ์ด ๋ผ์ธ์€ ์ˆ˜์ •ํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค. printf("ํ•™๊ต์˜ ์ด๋ฆ„ : %s\n", s1.name); // ์ถœ๋ ฅ => ํ•™๊ต์˜ ์ด๋ฆ„ : ๋ฏธ๊ตญ์ดˆ๋“ฑํ•™๊ต printf("ํ•™๊ต์˜ ์„ค๋ฆฝ์ผ : %d\n", s1.birth_date); // ์ถœ๋ ฅ => ํ•™๊ต์˜ ์„ค๋ฆฝ์ผ : 20180717 return 0; }
C
๋ณต์‚ฌ
๊ตฌ์กฐ์ฒด
โ€ข
๊ตฌ์กฐ์ฒด๊ฐ€ ๋‚˜์˜จ ์ด์œ 
โ—ฆ
์ •๋ณด๋ฅผ ํ•œ ๊ณณ์— ๋ชจ์•„์„œ ํŒŒ๋ผ๋ฏธํ„ฐ ๋“ฑ์— ๋„˜๊ธฐ๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ํŽธํ•ด์„œ์ด๋‹ค.
โ—ฆ
๊ตฌ์กฐ์ฒด == ํด๋ž˜์Šค == ํด๋”
โ€ข
๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น
โ—ฆ
typedef struct person { int age; // 4bytes โ†’ ์‹ค์ œ๋Š” 8bytes(64bit OS์—์„œ 8byte packing์ด๊ธฐ ๋•Œ๋ฌธ์— ํŒจ๋”ฉ ๋น„ํŠธ๊ฐ€ ์ถ”๊ฐ€๋จ) char* name; // 8bytes char* hometown; // 8bytes char* favorite_food; // 8bytes } Person;
โ—ฆ
์ด 28 bytes
โ—ฆ
์‹ค์ œ๋Š” ์ด 32bytes
โ€ข
๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ์ ‘๊ทผ
โ—ฆ
p1 โ†’ name์€ p1์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์˜ name์„ ์˜๋ฏธ
โ–ช
ex)
struct Person {int age; char* name}; struct Person *p1 = malloc(sizeof(struct Person)); p1->age = 230;
C
๋ณต์‚ฌ
โ—ฆ
p1.name์€ p1์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” name์„ ์˜๋ฏธ
โ–ช
ex)
struct Person {int age; char* name} p1; p1.name = 230;
C
๋ณต์‚ฌ
์ฐธ๊ณ ์ž๋ฃŒ
โ€ข
๊ตฌ์กฐ์ฒด ํŒจ๋”ฉ