1. 구조체란?
구조체(structure type)란 사용자가 C언어의 기본 자료형을 가지고 새로운 자료형을 정의할 수 있는 사용자 정의 자료형(user defined data type)입니다.
구조체는 기본 자료형으로는 나타낼 수 없는(혹은 불편한) 복잡한 데이터를 표현할 수 있습니다.
배열이 같은 자료형의 변수 집합이라고 한다면, 구조체는 다양한 타입의 변수 집합을 하나의 자료형으로 나타낸 것입니다.
이때 구조체를 구성하는 자료형들을 구조체의 멤버(member) 또는 멤버 변수(member variable)라고 합니다.
2. 구조체의 선언
struct 구조체이름
{
멤버변수의 자료형 멤버변수1의이름;
멤버변수의 자료형 멤버변수2의이름;
};
C
복사
구조체를 선언하는 방법은 너무 간단한다.
구조체를 선언하면 멤버 변수들을 같은 장소에서 관리 할 수 있기 때문에 유용합니다.
더불어 구조체도 ‘하나의 자료형’이기 때문에 또 다른 구조체의 멤버나, 심지어 스스로의 멤버 변수도 될 수 있습니다.
3. 구조체 멤버 변수로의 접근
배열에서는 인덱스를 이용하여 배열 요소에 접근할 수 있습니다.
하지만 구조체에서 구조체 멤버로 접근하려고 할 때는 멤버 연산자(.)를 사용해야 합니다.
구조체의_이름.멤버변수의_이름
C
복사
구조체의 주소값과 구조체의 첫 번째 멤버 변수의 주소는 언제나 같습니다
구조체 멤버가 포인터 자료형일 경우 → 연산자를 사용하여 배열 요소에 접근할 수 있습니다.
구조체의_이름->멤버변수의_이름
C
복사
혹은 간접참조 방식을 통해 멤버 연산자(.)를 사용해서도 접근할 수 있습니다.
*(구조체의_이름).멤버변수의_이름
C
복사
주의할 것은 참조연산자(*)의 위치에 따라서 선언의 의미가 달라질 수 있습니다.
*(구조체의_이름).멤버변수의_이름 // 구조체의 포인터 변수로 접근
(*구조체의_이름).멤버변수의_이름 // 포인터 구조체의 변수로 접근
C
복사
4. 구조체 변수의 초기화
구조체 변수를 초기화할 때에는 멤버 연산자(.)와 중괄호({})를 사용합니다.
구조체_변수의_이름 = {멤버변수1이름 = 초깃값, 멤버변수2이름 = 초깃값};
C
복사
5. 구조체 배열의 선언과 접근
다수의 int형 변수가 필요할 때 우리는 배열 혹은 동적할당을 고려합니다. 마찬가지로 다수의 구조체가 필요할 때 우리는 구조체 배열, 혹은 포인터 구조체의 동적할당을 사용할 수 있습니다.
//구조체 배열 선언
struct 구조체이름
{
멤버변수의 자료형 멤버변수1의이름;
멤버변수의 자료형 멤버변수2의이름;
};
struct 구조체이름 변수이름[10]; //10칸의 '변수이름'을 가진 구조체 배열 선언
struct 구조체이름 *변수이름 = (구조체이름 *)malloc(필요사이즈);
C
복사
위에서 보듯 구조체 배열, 혹은 동적할당의 선언방법과 접근방식은 낯설지 않습니다.
libft를 지나면서 처음 연결리스트를 만나셨다면, 구조체에 대해 낯설 수도 있을 거에요!
하지만 한걸음씩 배운다면 언젠가 좋은 프로그래머가 되어있을겁니다!
화이팅!