구조체는 관련 정보를 하나의 의미로 묶을 때 사용한다.
구조체는 아래처럼 struct 키워드로 정의한다.
struct [구조체이름] {
자료형 멤버이름1;
자료형 멤버이름2;
...
};
////////////////////// 예시 ////////////////////////
structmember { // 구조체 이름 : member
char number[20]; // 구조체 멤버 1
char name[20]; // 구조체 멤버 2
int age; // 구조체 멤버 3
};
위처럼 정의한 구조체는 이후 int나 char형, unsigned int 등의 자료형처럼 struct [구조체이름] 형태로 자료형 자리에 붙여준다. 구조체를 변수로 선언하는 방법은 아래와 같다.
struct [구조체이름] [변수이름];
//////////////// 예시 ////////////////
structmember m1;
// "int i;" 와 비슷한 형태. int 대신 struct member라는 것이 들어갔다고 생각하자.
위처럼 선언한 구조체 변수에 접근하는 방법은 다음과 같다.
strcpy(m1.number, "202012345");
strcpy(m1.name, "몽구");
m1.age = 20;
// 온점(.)으로 구조체 멤버에 접근하여 값 할당
// 참고로 문자열은 할당이 안되므로 strcpy, strncpy, strlcpy 등을 이용하여 할당.
구조체 변수를 선언할 때 일일이 struct 키워드를 붙이는 것보다 typedef로 구조체를 정의하면서 별칭을 지어주자. 방법은 아래와 같다.
typedef struct [구조체이름] {
자료형 멤버1 이름;
자료형 멤버2 이름;
...
} 구조체별칭;
////////////////////// 예시 //////////////////////
typedef struct_member {
char number[20];
char name[20];
int age;
} member;
// 이후 struct _member [변수이름]이 아닌, member [변수이름]으로 사용 가능.
그리고 42서울 라피신 과정에서의 norminette 기준에 따르면 typedef로 구조체를 정의해줄 때 아래와 같은 규칙을 지켜줘야 한다.
typedef structs_[구조체이름]
{
자료형 멤버1 이름;
자료형 멤버2 이름;
...
} t_[구조체별칭];
///////////////////// 예시 /////////////////////
typedef structs_member
{
char number[20];
char name[20];
int age;
} t_member;
구조체 이름 앞에는 s_ 를, 구조체 별칭의 이름 앞에는 t_ 를 붙여준다.
typedef와 struct 사이는 스페이스 하나로 채워준다.
typedef의 두 인자 (struct와 구조체이름) 사이에 탭을 써준다.
구조체이름과 구조체 별칭의 정렬을 맞춰준다.
멤버들의 이름의 정렬을 맞춰준다.