Young & Rich

 

오늘은 구조체에 대해서 포스팅을 해보겠습니다.

[구조체]

구조체란 무엇일까요? 구조체의 문법에 대해서 먼저 알아보고 설명하겠습니다.

struct 구조체이름{
	자료형 변수명;
	자료형 변수명;
	......
};

구조체는 내가 필요한 여러 가지 변수를 한 개의 형(type) 으로 만들어 프로그래밍을 용이하게 하기위함입니다.

예를 들어 국영수 성적관리 프로그램을 작성한다고 가정해봅시다.

기존에는 국영수 각각을 위한 3가지의 변수의 선언이 필요했습니다. 하지만, 구조체를 사용하면 훨씬 더 간단해집니다.

 

#include <stdio.h>

struct Student{		// 구조체 선언
	int kor;
	int eng;
	int math;
};

void main()
{
	struct Student st;  // struct Student 형 변수 st 선언
	st.kor = 100;	// 구조체의 변수 접근 방법 .
	st.eng = 95;
	st.math = 100;
	
	printf("국[%d] 영[%d] 수[%d]\n", st.kor, st.eng, st.math);
}

위와 같이 구조체를 선언하고 사용할 수 있습니다.

 

일단 구조체를 선언하고 멤버변수(구조체 안에 선언한 변수 kor, eng, math) 에 접근하려면 . 으로 접근할 수 있습니다.

 

그리고 구조체  선언을 할 때, 좀 더 간편하게 하기 위해 사용을 많이 하는 문법을 같이 소개하겠습니다.

 

바로 typedef 라는 것입니다.

typedef : type definition | 형 정의 를 의미합니다.

 

예제를 보면서 설명하겠습니다.

#include <stdio.h>

typedef int num;

void main()
{
	int a = 1;
	num b = 2;

	printf("%d %d\n", a, b);
}

프로그램을 실행해보면, 1 2 라는 값이 출력됩니다.

typedef int num; => 나 이제 int 를 num 이라고 정의할거야. 즉, num a; 라고 쓰면 int a; 라고 쓴 효과와 같습니다.

 

이제 이걸 구조체에 적용해보겠습니다.

#include <stdio.h>

typedef struct Student{		// 구조체 선언
	int kor;
	int eng;
	int math;
}Student;

void main()
{
	Student st;
	st.kor = 100;
	st.eng = 95;
	st.math = 100;
	
	printf("국[%d] 영[%d] 수[%d]\n", st.kor, st.eng, st.math);
}

strcut Student 자료형을 나는 Student 로 정의할꺼야.

즉, Student st; == struct Student st; 라고 한 것과 동일합니다.

 

이제 학생 30명을 관리하는 프로그램을 만든다면 구조체를 사용해서 만들면 더 편리하겠죠?

 

Student st[30];

이렇게만 선언하고 st[i].kor , st[i].math.. 이렇게 접근하면 됩니다.

 

마지막으로, 구조체의 멤버 변수를 접근할 때, '.' 과 하나가 더 있습니다.

바로, '->' 이것입니다.

-> 의미는 * 의 의미와 비슷한데요. 해당 주소값을 참조하여 멤버변수를 가르킵니다. 예를 들어보겠습니다.

#include <stdio.h>

typedef struct Student{		// 구조체 선언
	int kor;
	int eng;
	int math;
}Student;

void print_score(Student *, Student *);

void main()
{
	Student st1, st2;
	st1.kor = 100;
	st1.eng = 100;
	st1.math = 100;

	st2.kor = 90;
	st2.eng = 90;
	st2.math = 90;

	print_score(&st1, &st2);	
}

void print_score(Student *st1, Student *st2)
{
	printf("st1[%d][%d][%d], st2[%d][%d][%d]\n",
		st1->kor, st1->eng, st1->math, st2->kor, st2->eng, st2->math);
}

포인터변수에는 주소값이 들어가있기 때문에, 구조체의 주소값에서 멤버변수를 참조하려면 -> 를 사용해야 합니다.

 

구조체에 대해서 간단히 알아봤습니다.

 

★ 구조체의 선언은 int, double, char 와 같은 새로운 자료형을 하나 생성하는 것입니다.

 

서브웨이 가면, 제가 원하는 재료를 골라 담아서 샌드위치를 만들잖아요. 내가 원하는 필요한 자료형들이 들어가 있는 새로운 자료형을 만드는 것이라고 생각하시면 됩니다.

 

새로운 자료형이 생성된 것이므로, 포인터로도 쓸 수 있고 배열로도 쓸 수 있고 저희가 원래 쓰던 자료형과 똑같은 용도로 사용 가능합니다.

 

여기까지 구조체에 대한 포스팅을 마치겠습니다.

 

그럼 20000.

 

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band