자료형에는 기본 자료형과 유도자료형이 있습니다. 기본 자료형은 초반에 공부했던 정수형, 부동소수형, 문자형등이 있고, 유도 자료형은 기본 자료형을 응용해서 보다 복잡한 자료 구현하는 자료형으로 앞에서 공부한 배열, 포인터 그리고 구조체와 공용체가 있습니다.


구조체

 구조체란 여러 종류의 변수를 하나로 묶어서 사용하는 데이터 타입으로 사용자가 직접 정의하는 사용자 정의 타입중 하나입니다. 앞에서 공부했던 함수처럼 메인함수 위쪽에 정의해야 메인함수 등 코드의 아래쪽에서 사용할 수 있습니다. 구조체의 정의와 사용은 아래와 같습니다.

----------------------------------------------------------------------------------------

// 구조체 정의

struct test{

int age;

char *name;

char *hobby;

}; // 세미콜론을 꼭 붙여줘야합니다.


// 구조체 필드에 접근

struct [구조체 이름] [구조체 변수이름];

struct test p1;

[구조체 변수이름].[구조체 필드이름];

p1.name;

----------------------------------------------------------------------------------------


 구조체 변수를  포인터로도 사용할 수 있습니다. 이때, 구조체 필드에 접근은 어떻게 표현할까요?

----------------------------------------------------------------------------------------

struct test{

int age;

char *name;

char *hobby;

};

struct test *p1;

(*p1).age; // 이렇게 표현이 가능하지만 

p1->age; // 이렇게 화살표로도 표현이 가능합니다.

----------------------------------------------------------------------------------------


 이름, 국어, 수학 성적을 입력받아 평균까지 출력하는 코드를 작성해 봤습니다. 사실 간단하게 작성할 수 있는 내용이지만, 구조체를 이용했습니다. 이름, 국어, 수학 성적을 입력을 받고 평균을 계산해서 구조체에 넘겨준뒤에, 구조체를 매개변수로 하는 함수를 이용해 출력을 했습니다.

----------------------------------------------------------------------------------------

#include <stdio.h>

#include <string.h>

#pragma warning(disable:4996)


struct student{

char name[5];

int korean;

int math;

double average;

};


void out(struct student a); // 구조체를 매개변수로 하는 함수 정의


int main()

{

char input_name[10];

int input_korean;

int input_math;

struct student b;

printf("이름과 성적을 입력하세요.\n");

printf("이름 : ");

scanf("%s", input_name);

printf("국어 : ");

scanf("%d", &input_korean);

printf("수학 : ");

scanf("%d", &input_math);

printf("-----입력 완료-----\n");


strcpy(b.name ,input_name);

b.korean = input_korean;

b.math = input_math;

b.average = (double)(b.korean +b.math) / 2;


out(b); // 함수호출로 출력


return 0;

}


void out(struct student a) 구조체를 매개변수로 하는 함수 구현

{

printf("이름 : %s \n국어 : %d \n수학 : %d \n평균 : %.2lf\n", a.name, a.korean, a.math, a.average);

}

----------------------------------------------------------------------------------------


* 출처 : 한국기술교육대학교 온라인평생교육원 C 프로그래밍_2 

          스타일 C프로그래밍 저.김종훈,김종진 출.WellBook




'언어 > C' 카테고리의 다른 글

[C] 동적 메모리  (0) 2017.01.03
[C] 공용체  (0) 2016.12.27
[C] 배열과 포인터  (3) 2016.12.25
[C] 포인터  (0) 2016.12.23
[C] 배열  (0) 2016.12.23

+ Recent posts