예를 들어, 학생이라는 구조체가 있다고 가정해보자.
이름(name), 입학년도(year), 성적(score) 속성을 가지고 있고 각각은 문자, 정수, 실수 자료형을 가진다.
struct student {
char name[20+1]; // +1은 NULL 문자
int year;
float score;
};
방법 1 : 선언과 동시에 구조체 초기화
struct student student_lee = {
"lee", 2008, 95.4
};
배열의 초기화 같은 방법으로도 구조체 변수를 초기화 할 수 있는데 구조체 멤버 변수가 정의된 순서에 따라 차례대로 초깃값을 적어주어야 한다.
방법 1-2
struct student lee_src = {
.name = "lee",
.year = 2008,
.score = 95.4
};
중괄호 안에 구조체의 속성을 차례대로 기입해주면 된다.
구조체 멤버가 정의된 순서와는 상관이 없다.
방법2 : 선언한 이후 변수에 값 대입을 통해 설정
struct student student_lee = {0};
strcpy(student_lee.name, "lee");
student_lee.year = 2008;
student_lee.score = 95.4;
구조체의 속성을 지칭하기 위해 .
을 찍어 사용했다.
직접 대입하는 방법
struct student lee_src = {
"lee", 2008, 95.4
};
struct student lee_dest = {0, };
lee_dest = lee_src;
c컴파일러가 구조체의 크기를 알고 있기 때문에 값을 그대로 복사해서 사용할 수 있다.
tpyedef는 C언어에 이미 존재하는 타입에 새로운 이름을 붙일 때 사용한다. (새로운 구조체를 하나의 데이터 타입으로 재정의)
구조체 변수는 매번 struct 키워드를 사용하여 구조체임을 명시해야 하나 typedef 키워드를 사용하면 매번 struct 키워드를 명시하지 않아도 된다.
typedef stuct student_type{
char name[20+1];
int year;
float score;
} student;
student lee_src = { "lee", 2009, 95.4 };
typedef로 선언한 student_type를 사용할 때
student만 작성해도 된다.