본문 바로가기

[무따기 C언어]구조체 포인터 사용.

반응형

구조체를 포인터로 선언하는 방법

   

typedef struct _Grade {

char Name[20];

int Number;

int Korea;

}Grade;

...

Grade *ptr;

   

위와 같이 정의하면 포인터 변수 ptr은 구조체를 가르키는 포인터가 됩니다.

포인터로 구조체 항목을 사용할 때 참조 연산자 '->'를 사용.

'->' 연산자는 오직 포인터로 되어 있는 구조체와 뒤에 배울 공용체의 항목에 접근하는데만 사용된다.

   

strcpy(ptr->Name, "여인춘");

ptr->Number = 1003;

ptr->Korean = 100;

   

일반적인 구조체 변수가 도트 연산자(.)를 사용하는 반면, 구조체의 포인터 변수는 참조연산자(->)를 사용한다고 기억.

   

   

#include <stdio.h>

#include <string.h>

   

typedef struct _Grade   //구조체 정의

{

  char Name[20];

  int Number;

  int Korean;

}Grade;

   

void ShowTable(Grade *);  //함수에 파라미터를 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);    //&사용 scanf니까

    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 *ptr)//*ptr 가르키는 곳의 값을 저장

  {

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

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

    Total += ptr->Korean;

  }

   

구조체 포인터를 사용한는 것은 일반적인 포인터의 사용 방법과 동일하다. 그리고 구조체의 항목을 포인터로 사용하기 위해서는 참조 연산자(->)를 사용한다.

반응형
-->