C언어에는 struct라는 자료구조가 있다.
이 struct가 무엇인지 먼저 사용법을 알아보고 그 다음으로는 왜 쓰는지 알아보자.
struct키워드를 사용하여 struct를 선언할 수 있다.
User struct안에는 id, age, weight가 int타입으로 정의되어 있는 것을 볼 수 있다.
struct User {
int id;
int age;
int weight;
};
사용할 때는 struct 타입이름 변수이름 으로 선언할 수 있다.
타입이름? 뭔가 이상하지 않은가. 그렇다 struct로 정의를 하면 내가 직접 타입을 하나 만드는 거랑 똑같다.
struct User u;
. 을 사용해서 struct의 원소에 접근하여 참조 및 수정을 할 수 있다.
u.id = 1;
u.age = 25;
u.weight = 75;
struct를 선언과 동시에 초기화할 수 있다. 아래 코드와 같이 {}를 사용하여 초기화하면 된다. 이 때 struct에 정의된 변수타입과 순서가 일치해야 한다.
#include "stdio.h"struct Test {
int a, b;
char str[100];
};
int main() {
struct Test st = {1, 2, "Hello World"};
printf("%d %d %s", st.a, st.b, st.str);
return 0;
}
struct를 복사할 수 있다.
그냥 다른 변수에다가 할당하면 복사가 된다.
아래는 str1를 str2에다가 복사한 뒤 a변수의 값을 변경 했다.값을 복사했으므로 str1의 a와 str2의 a의 값이 다른 것을 볼 수 있다.
#include "stdio.h"struct Test {
int a, b;
char str[100];
};
int main() {
struct Test st1 = {1, 2, "Hello World"};
struct Test st2 = st1;
st2.a = 123123;
// 출력값:// 1 2 Hello World// 123123 2 Hello Worldprintf("%d %d %s\\\\n", st1.a, st1.b, st1.str);
printf("%d %d %s\\\\n", st2.a, st2.b, st2.str);
return 0;
}
정의와 동시에 선언을 할 수 있다. 아래 코드를 보면 Obj struct를 정의함과 동시에 obj1, obj2를 선언하는 것을 볼 수 있다.
#include <stdio.h>struct Obj {
int a, b;
} obj1 = {1, 2}, obj2 = {3, 4};
int main() {
printf("%d, %d\\\\n", obj1.a, obj1.b);
printf("%d, %d\\\\n", obj2.a, obj2.b);
return 1;
}
포인터를 사용해서 struct를 참조할 수 있다. 포인터를 사용했으니 struct의 주소값이 복사가 되어 할당된다.