C 프로그래밍 · 2 min read · Nov 18, 2025
리눅스 C 프로그래밍 튜토리얼 26부 - 구조체와 함수

이전의 명령줄 튜토리얼 중 하나에서 우리는 구조체의 개념에 대해 언급했습니다. 이해하기 쉬운 예제를 사용하여 구조체가 무엇인지, 왜 필요한지와 같은 기본적인 내용을 논의했습니다. 이를 확장하여 이번 튜토리얼에서는 구조체와 함수를 함께 사용하는 방법에 대해 논의하겠습니다.
C 프로그래밍 언어의 구조체와 함수
시작하기 전에 구조체가 어떻게 선언되는지 간단히 복습해 보겠습니다. 다음은 예제입니다:
struct emp_details {
int emp_code;
int emp_age;
};여기서 struct 키워드는 C에서 구조체를 정의할 때 필수적이며 선언의 시작을 나타냅니다. 그 뒤에는 태그, 즉 구조체의 이름이 옵니다. 그런 다음 괄호 안에는 이 구조체의 일부로 그룹화된 두 개의 정수 변수가 있습니다.
이 구조체를 사용하려면 먼저 인스턴스 또는 객체를 정의해야 합니다. 다음과 같은 방법으로 할 수 있습니다:
emp_details obj;그런 다음 구조체 멤버는 다음과 같은 방법으로 접근할 수 있습니다:
obj.emp_code
obj.emp_age이제 함수에 대해 이야기해 보겠습니다. 함수는 구조체를 반환할 수 있으며 인수 형태로 구조체를 받을 수도 있습니다. 다음은 예제입니다:
#include
struct emp_details {
int emp_code;
int emp_age;
};
struct emp_details fill(int code, int age)
{
struct emp_details obj;
obj.emp_code = code;
obj.emp_age = age;
return obj;
}
int main()
{
int x,y;
printf("직원 코드를 입력하세요: ");
scanf("%d", &x);
printf("\n 직원 나이를 입력하세요: ");
scanf("%d", &y);
struct emp_details new_obj;
new_obj = fill(x,y);
printf("\n 입력한 직원 코드와 나이는: %d 및 %d", new_obj.emp_code, new_obj.emp_age);
return 0;
} 여기서 이 예제에서는 두 개의 정수를 받아 코드와 나이로 처리하고, 이 정보를 기반으로 구조체를 채우고, 구조체를 값으로 호출자에게 반환하는 ‘fill’이라는 함수가 있습니다.
앞서 언급한 바와 같이 구조체는 함수 인수로도 전달될 수 있습니다. 다음은 ‘fill’ 함수가 ‘emp_details’ 구조체를 인수로 받는 예제입니다:
#include
struct emp_details {
int emp_code;
int emp_age;
};
void fill(struct emp_details obj)
{
printf("\n 입력한 직원 코드와 나이는: %d 및 %d", obj.emp_code, obj.emp_age);
}
int main()
{
int x,y;
printf("직원 코드를 입력하세요: ");
scanf("%d", &x);
printf("\n 직원 나이를 입력하세요: ");
scanf("%d", &y);
struct emp_details new_obj;
new_obj.emp_code = x;
new_obj.emp_age = y;
fill(new_obj);
return 0;
} 그리고 제 경우의 출력은 다음과 같습니다:
직원 코드를 입력하세요: 36
직원 나이를 입력하세요: 29
입력한 직원 코드와 나이는: 36 및 29계속해서 일반 변수, 배열 등과 마찬가지로 구조체에 대한 포인터도 있을 수 있습니다. 다음은 예제입니다:
struct emp_details *ptr;항상 그렇듯이 포인터는 구조체 크기가 크고 이를 함수에 인수로 전달할 때 유용합니다. 이상적으로는 다음과 같이 포인터 객체를 통해 구조체 변수를 접근할 수 있습니다:
(*ptr).emp_code
(*ptr).emp_age하지만 단순함을 위해 C는 *와 .을 생략하고 ‘->’를 대신 사용할 수 있도록 허용합니다. 다음은 예제입니다:
ptr->emp_code
ptr->emp_age 구조체 포인터를 사용하는 예제는 다음과 같습니다:
#include
struct emp_details {
int emp_code;
int emp_age;
};
void fill(struct emp_details *obj)
{
printf("\n 입력한 직원 코드와 나이는: %d 및 %d", obj->emp_code, obj->emp_age);
}
int main()
{
int x,y;
printf("직원 코드를 입력하세요: ");
scanf("%d", &x);
printf("\n 직원 나이를 입력하세요: ");
scanf("%d", &y);
struct emp_details new_obj;
new_obj.emp_code = x;
new_obj.emp_age = y;
fill(&new_obj);
return 0;
} 이것은 우리가 이전에 사용했던 동일한 예제이지만, 구조체 포인터를 사용하고 있는 변경 사항은 굵게 표시되어 있습니다.
결론
이번 튜토리얼에서는 함수와 구조체를 함께 사용하는 방법에 대해 논의하여 구조체에 대한 이해를 확장했습니다. 여기서 사용한 예제를 로컬 시스템에서 시도해 보시기 바랍니다. 의문이나 질문이 있는 경우 아래에 댓글을 남겨주세요.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.