본문 바로가기

[무따기 C언어]함수의 파라미터로 구조체 사용하기.

반응형

구조체로 선언된 변수는 일반적인 변수형과 마찬가지로 함수의 파라미터로 사용하는 것이 가능.

   

서로 같은 자료형을 사용하지만 구조체의 이름이 다른 경우에는 서로 호환이 가능한가?

구조체의 항목이 같고 구조체의 이름이 다른 두 개의 구조체는 서로 호환되지 않는다.

   

struct Class_A

{

char Name[20];

int Number;

};

   

struct Class_B

{

char Name[20];

int Number;

}

   

위 두 개의 구조체에서 다음과 같이 변수 선언을 했다고 치면

   

struct Class_A Var_A;

struct Class_B Var_B;

   

변수 Var_A와 Var_B는 서로 같은 항목을 갖고 있는 구조체 이지만 두 개의 변수를 Var_A = Var_B; 이렇게 사용하면 오류가 발생.

그 이유는 변수의 내부구조가 같더라도 완전히 서로 다른 자료형으로 인식되기 때문. 그러나 다음과 같이

구조체 항목을 대입하는 것은 가능.

Var_A.Number = VAr_B.Number;

   

   

#include <stdio.h>

#include <string.h>

   

typedef struct _Grade   //구조체 정의

{

  char Name[20];

  int Number;

  int Korean;

}Grade;

   

void ShowTable(Grade);  //함수의 인자에 구조체를 사용

int Total;  //평균점수를 구하기 위해 학생점수를 저장하는 변수를 전역변수로 지정.

   

int main()

{

  Grade ClassOfGrade_1[3];  //구조체의 ClassOfGrade_1라는 변수 지정

  char buf[20];

  int i;

  Total = 0;

   

  printf("1학년 학생의 성적관리 프로그램입니다.\n");

   

  for(i =0 ; i < 3 ; i++)

  {

    printf("%d  학생의 이름을 입력하세요. :" , i+1);

    scanf("%s" , ClassOfGrade_1[i].Name);

    printf("학번을 입력하세요. :");

    scanf("%d"&ClassOfGrade_1[i].Number);    // 주소로 접근하지?

    printf("국어 성적을 입력하세요. :");

    scanf("%d" , &ClassOfGrade_1[i].Korean);

    printf("\n");

  }

   

  printf("\n=========================================\n");

  printf("학번\t\t이름\t\t국어 성적\t\t\n");

  for(i = 0; i <3; i++)

  {

    ShowTable(ClassOfGrade_1[i]);

   

  }

   

  printf("===================================================\n");

   

  printf("평균\t%d\n" , Total /3);

  }

  void ShowTable(Grade tbl)

  {

    printf("[%d]\t\t[%s]\t" , tbl.Number, tbl.Name);  //구조체 Grade 변수tbl 사용하여 

    printf(" %d\n" , tbl.Korean);        //출력  연산.

    Total +=tbl.Korean;

  }

   

구조체를 함수의 인자로 사용할 수 있다.

단 typedef를 사용할 경우는 '구조체_이름 파라미터_이름'

typedef를 사용하지 않을 경우에는 'struct 구조체_이름 파라미터_이름' 으로 struct 키워드를 넣어주어야 한다.

   

   

   

반응형
-->