C언어에는 struct라는 자료구조가 있다.

이 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의 주소값이 복사가 되어 할당된다.