구조체와 함수들 in C
안녕하세요, 미래의 코딩 마법사 여러분! 오늘 우리는 C 언어의 구조체와 함수 세계로 흥미로운 여행을 떠납니다. 여러분의 친절한 이웃 컴퓨터 과학 교사로서, 저는 많은 예제와 설명으로 이 모험을 안내해 드리겠습니다. 그러니 가상의 배낭을 챙기고, 함께 뛰어들어 보겠습니다!
구조체는 무엇인가요?
구조체를 핫플래터처럼 전달하기 전에, 먼저 그것이 무엇인지 이해해 보겠습니다. C에서 구조체는 다양한 유형의 데이터를 담을 수 있는 컨테이너입니다. 여행을 준비할 때, 여러분은 옷장(구조체)에 옷, 위생용품, 그리고 좋은 책(다양한 데이터 타입)을 담을 수도 있을 것입니다.
여기 간단한 구조체 정의를 보여드리겠습니다:
struct Student {
char name[50];
int age;
float gpa;
};
이 Student
구조체는 이름(문자열로), 나이(정수로), GPA(浮動小数로)를 담을 수 있습니다. 정말 멋지죠?
구조체 요소를 함수에 전달하는 방법
이제 구조체의 개별 요소를 함수에 어떻게 전달할 수 있는지 살펴보겠습니다. 친구에게 가방에서 치약만 가져오도록 부탁하는 것처럼, 전체가 아니라 부분만 전달하는 것입니다.
#include <stdio.h>
struct Student {
char name[50];
int age;
float gpa;
};
void printAge(int age) {
printf("학생의 나이는: %d\n", age);
}
int main() {
struct Student john = {"John Doe", 20, 3.8};
printAge(john.age);
return 0;
}
이 예제에서, 우리는 Student
구조체의 age
요소만 printAge
함수에 전달하고 있습니다. 간단하고 명확합니다!
구조체 변수를 함수에 전달하는 방법
하지만 전체 "가방"을 전달하고 싶다면 어떻게 하나요? 그것도 가능합니다! 전체 구조체를 함수에 전달하는 방법을 보겠습니다:
#include <stdio.h>
struct Student {
char name[50];
int age;
float gpa;
};
void printStudent(struct Student s) {
printf("이름: %s\n", s.name);
printf("나이: %d\n", s.age);
printf("GPA: %.2f\n", s.gpa);
}
int main() {
struct Student john = {"John Doe", 20, 3.8};
printStudent(john);
return 0;
}
여기서 우리는 전체 john
구조체를 printStudent
함수에 전달하고 있습니다. 친구에게 전체 가방을 건네는 것과 같습니다.
함수에서 구조체를 반환하는 방법
이제 좀 더 복잡해집시다. 함수가 구조체를 생성하고 반환하는 것은 어떻게 하나요? 친구가 가방을.pack하고 돌려주는 것과 같습니다. 그런 방법을 보겠습니다:
#include <stdio.h>
#include <string.h>
struct Student {
char name[50];
int age;
float gpa;
};
struct Student createStudent(char *name, int age, float gpa) {
struct Student s;
strcpy(s.name, name);
s.age = age;
s.gpa = gpa;
return s;
}
int main() {
struct Student newStudent = createStudent("Jane Doe", 22, 3.9);
printf("새로운 학생이 생성되었습니다: %s, %d 세, GPA: %.2f\n",
newStudent.name, newStudent.age, newStudent.gpa);
return 0;
}
이 예제에서, 우리의 createStudent
함수는 학생 생성기와 같습니다. 정보를 주면, 완전히.pack된 "학생 가방"을 돌려줍니다!
구조체를 참조로 함수에 전달하는 방법
occasionally, we want to modify the original structure inside a function. It's like asking your friend to add something to your suitcase without bringing the whole thing back. For this, we use pointers:
#include <stdio.h>
struct Student {
char name[50];
int age;
float gpa;
};
void updateAge(struct Student *s, int newAge) {
s->age = newAge;
}
int main() {
struct Student john = {"John Doe", 20, 3.8};
printf("John's age before: %d\n", john.age);
updateAge(&john, 21);
printf("John's age after: %d\n", john.age);
return 0;
}
Here, we're passing the address of our john
structure to the updateAge
function. The function then uses the ->
operator to access and modify the age
field directly.
How to Return a Struct Pointer
Lastly, let's look at how we can return a pointer to a structure. This is useful when we're dealing with large structures or when we want to create structures that persist after the function ends.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Student {
char name[50];
int age;
float gpa;
};
struct Student* createStudentPointer(char *name, int age, float gpa) {
struct Student *s = malloc(sizeof(struct Student));
strcpy(s->name, name);
s->age = age;
s->gpa = gpa;
return s;
}
int main() {
struct Student *newStudent = createStudentPointer("Bob Smith", 19, 3.7);
printf("New student created: %s, %d years old, GPA: %.2f\n",
newStudent->name, newStudent->age, newStudent->gpa);
free(newStudent); // Don't forget to free the allocated memory!
return 0;
}
In this example, our createStudentPointer
function is like a valet service. It not only packs the suitcase for you but also remembers where it put it and gives you the location (the pointer).
Conclusion
And there you have it, folks! We've packed, unpacked, modified, and created structures in various ways. Remember, practice makes perfect, so don't be afraid to experiment with these concepts. Who knows? You might just structure your way to becoming the next big thing in programming!
Here's a quick reference table of the methods we've covered:
Method | Description |
---|---|
Passing Struct Elements | Pass individual fields of a structure to a function |
Passing Struct Variable | Pass an entire structure to a function |
Returning Struct | Create and return a structure from a function |
Passing Struct by Reference | Modify a structure inside a function using pointers |
Returning Struct Pointer | Create a structure on the heap and return its pointer |
Happy coding, and may your structures always be well-organized!
Credits: Image by storyset