구조체를 포인터로 선언하는 방법
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;
}
구조체 포인터를 사용한는 것은 일반적인 포인터의 사용 방법과 동일하다. 그리고 구조체의 항목을 포인터로 사용하기 위해서는 참조 연산자(->)를 사용한다.
'About 프로그래밍!!! > C언어 무따기 정리' 카테고리의 다른 글
[무따기 C언어] 공용체의 실무응용 (0) | 2010.06.27 |
---|---|
[무따기 C언어] 공용체 (0) | 2010.06.27 |
[무따기 C언어]함수의 파라미터로 구조체 사용하기. (0) | 2010.06.26 |
[무따기 C언어]구조체 (0) | 2010.06.26 |
[무따기C언어] 9과(포인터의 이해) (0) | 2010.05.26 |