웹사이트 검색

Linux C 프로그래밍 자습서 26부 - 구조 및 함수


이 페이지에서

  1. C 프로그래밍 언어의 구조와 기능\n
  2. 결론

이전 명령줄 자습서 중 하나에서 구조의 개념을 다루었습니다. 이해하기 쉬운 예를 사용하여 구조란 무엇이며 구조가 필요한 이유와 같은 기본적인 내용에 대해 논의했습니다. 이를 확장하여 이 자습서에서는 구조와 함수를 함께 사용할 수 있는 방법에 대해 설명합니다.

C 프로그래밍 언어의 구조와 함수

시작하기 전에 구조가 선언되는 방식을 빠르게 새로 고칩니다. 예를 들면 다음과 같습니다.

struct emp_details {

int emp_code;
int emp_age;

};

따라서 여기에서 struct 키워드(C에서 구조를 정의하는 경우 필수)는 선언의 시작을 나타냅니다. 그 뒤에 태그가 오거나 구조의 이름을 말할 수 있습니다. 그런 다음 대괄호 안에는 이 구조의 일부로 함께 그룹화되는 두 개의 정수 변수가 있습니다.

이 구조를 사용하려면 먼저 해당 인스턴스 또는 개체를 정의해야 합니다. 다음과 같은 방법으로 이를 수행할 수 있습니다.

emp_details obj;

그런 다음 구조체 멤버는 다음과 같은 방법으로 액세스할 수 있습니다.

obj.emp_code
obj.emp_age

이제 함수의 경우 함수는 구조를 반환할 수 있을 뿐만 아니라 인수 형식으로 구조를 받아들일 수 있습니다. 예를 들면 다음과 같습니다.

#include <stdio.h>

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("Enter employee code: ");
scanf("%d", &x);

printf("\n Enter employee age: ");
scanf("%d", &y);

struct emp_details new_obj;

new_obj = fill(x,y);

printf("\n The employee code and age you entered are: %d and %d", new_obj.emp_code, new_obj.emp_age);

return 0;
}

따라서 여기 이 예제에서는 두 개의 정수를 받아들이고 코드와 나이로 처리하고 이 정보를 기반으로 구조를 채우고 값으로 구조를 함수 호출자에게 반환하는 채우기 함수가 있습니다.

이제 위의 문장에서 앞서 언급했듯이 구조도 함수 인수로 전달할 수 있습니다. 다음은 fill 함수가 emp_details 구조를 인수로 받아들이는 예입니다.

#include <stdio.h>

struct emp_details {

int emp_code;
int emp_age;

};

void fill(struct emp_details obj)
{
printf("\n The employee code and age you entered are: %d and %d", obj.emp_code, obj.emp_age);
}

int main()
{
int x,y;

printf("Enter employee code: ");
scanf("%d", &x);

printf("\n Enter employee age: ");
scanf("%d", &y);

struct emp_details new_obj;
new_obj.emp_code = x;
new_obj.emp_age = y;

fill(new_obj);

return 0;
}

제 경우의 결과는 다음과 같습니다.

Enter employee code: 36 
Enter employee age: 29

The employee code and age you entered are: 36 and 29

계속해서 일반 변수, 배열 등과 같이 구조에 대한 포인터도 있을 수 있습니다. 예를 들면 다음과 같습니다.

struct emp_details *ptr;

항상 그렇듯이 포인터는 구조 크기가 크고 이를 함수의 인수로 보내는 경우에 유용합니다. 이상적으로 포인터 개체를 통해 구조 변수에 액세스하는 방법은 다음과 같습니다.

(*ptr).emp_code
(*ptr).emp_age

그러나 단순화를 위해 C에서는 * 및 를 생략할 수 있습니다. 대신 ->를 사용하십시오. 다음은 예입니다.

ptr->emp_code
ptr->emp_age 

다음은 구조체 포인터를 사용하는 예입니다.

#include <stdio.h>

struct emp_details {

int emp_code;
int emp_age;

};

void fill(struct emp_details *obj)
{
printf("\n The employee code and age you entered are: %d and %d", obj->emp_code, obj->emp_age);
}

int main()
{
int x,y;

printf("Enter employee code: ");
scanf("%d", &x);

printf("\n Enter employee age: ");
scanf("%d", &y);

struct emp_details new_obj;
new_obj.emp_code = x;
new_obj.emp_age = y;

fill(&new_obj);

return 0;
}

이것은 이전에 사용한 것과 동일한 예이지만 지금은 구조 포인터를 사용하고 있으므로 변경 사항은 굵게 강조 표시되어 있습니다.

결론

이 자습서에서는 함수와 구조를 함께 사용하는 방법을 논의하여 구조에 대한 이해를 확장했습니다. 여기에서 사용한 예제를 로컬 시스템에서 사용해 보시기 바랍니다. 의심이나 질문이 있는 경우 아래에 의견을 남겨주십시오.