안녕하세요. 모프 입니다.
오늘은 C언어의 구조체에 대하여 설명해보도록 하겠습니다.
배열과 비교하여 설명하자면 배열은 한가지 자료형으로 여러개를 제공하지만 구조체는 여러종류의 자료형을 한군데 묶어서 하나의 자료형으로 사용 할 수 있습니다.
그럼 우선 한번 사용해 보겠습니다.
1. 구조체를 사용해 보자.
구조체는 각기 다른 자료형들을 모아서 새로운 자료형을 만드는 것입니다.
우리는 학생이라는 자료형을 만들어 보겠습니다.
학생이라는 자료형에는 이름, 나이, 국어/영어/수학 성적 이러한 요소를 담게 될것입니다.
위 코드가 바로 구조체 입니다. 구조체 키워드는 "struct"입니다. "struct" 다음 "student"는 이 구조체명입니다.
구조체의 내부를 살펴보면 문자형 배열 "name" , 정수형변수 "age" , 더블형 배열 grade 이렇게 있네요.
바로 이름, 나이, 국영수 성적입니다.
이 모든 내부 자료형을 중괄호로 묶고 마무리는 세미콜론으로 합니다.
2. 구조체의 변수 선언
학생 구조체를 만들었으면 선언을 해봐야겠죠?
녹색 네모가 구조체를 정의한부분이고, 붉은 네모가 정의한 구조체를 가지고 구조체 변수를 선언한 부분입니다.
선언할때는 일반 변수처럼 사용하시면되죠. 단 ("struct" + 정의한 구조체 이름) 모양이 자료형이 됩니다.
3. 구조체 변수 초기화
구조체 변수를 만들었으니 초기화 하는 방법을 알아볼까요?
빨간 네모 부분을 보시면 중괄호로 묶어서 맴버변수의 순서대로 넣어주시면 됩니다. "name" 변수에는 "morph"값이, "age"변수에는 20이 "grade"배열에는 70,80,90이 순차적으로 들어가게 됩니다.
4. 구조체 변수 사용 (맴버 참조연산자)
그렇다면 구조체 변수에 데이터를 한번 넣어볼까요??
네 빨간 네모부분이 구조체 내부 변수에 데이터를 넣는 모습입니다. 구조체변수의 내부변수를 직접 사용하기 위해서 "."(period)를 사용하시면 됩니다.
이것을 "맴버 참조연산자" 라고 불립니다.
예를 들면 학생 구조체에서 나이를 가져와 쓰고 싶다면 person.age 로 사용하시면 됩니다.
5. 구조체의 맴버변수로 포인터 사용하기
말 그대로 구조체 내부를 구성하는 맴버 변수중에 포인터 변수를 사용하는 방법입니다.
위 코드의 녹색 네모를 보시면 이름 변수가 문자형 포인터 변수인것을 확인 할 수 있습니다.
이름 초기화 하는 방법이 더 쉬워졌군요.
6. 구조체의 구조체 모양
네 제목 그대로 구조체의 맴버 변수중에 또 다른 구조체가 있는 모습입니다.
구조체 모양을 한번 보실까요?
성적이라는 부분에 구조체를 선언하여 학생이라는 구조체에 포함 시킨 모습입니다.
대충 눈치 챘을 거라 생각됩니다. 그렇다면 이 구조체도 한번 사용해 볼까요?
국어에만 80을 넣어서 출력한 모습입니다.
(구조체명.맴버구조체명.맴버변수) 와 같은 형태로 사용되어지죠. 참쉽죠? 구조체끼리의 사용은 온점"." 연결되는 구조입니다.
7. 외부변수 구조체 선언
외부변수로 구조체를 선언할때 방법입니다.
다음과 같이 사용하시면 구조체 외부변수 "person"이 생성되게 됩니다.
이 변수는 외부변수이기 때문에 모든 함수에서 사용이 가능하게 됩니다.
ps. 추가적으로 말하면 구조체를 정의하면 그 구조체는 일반 자료형처럼 사용이 가능합니다. 따라서 함수 복귀값형태나 매개변수의 자료형으로도 사용이 가능합니다. 이부분에 대해서는 여기서는 언급안하고 나중에 따로 설명할 기회가 있다면 설명하도록 하겠습니다.