C 구조체 기본 - sonkoni/Koni-Wiki GitHub Wiki

구조체 기본

구조체 정의 끝에는 반드시 세미콜론(;)  있어야 한다.

== 구조체 정의 ==
struct 구조체이름 {
    자료형 멤버이름;
};

== 구조체 선언 ==
struct 구조체이름 변수이름;
struct 구조체이름 변수이름 = {.멤버이름1 = 값1, .멤버이름2 = 값2};
struct 구조체이름 변수이름 = {순서대로멤버값1, 순서대로멤버값2};

== 구조체 멤버 접근 ==
변수.멤버;
변수.멤버 = ;

구조체 만들기

#include <stdio.h>
#include <string.h>  /* srtcpy */

struct Person {
    char name[20];
    int age;
    char address[100];
};

int main(int argc, char *argv[]) {
    struct Person p1;

    // 구조체 멤버 할당은 . 으로 한다.
    //   스칼라는 = 로 할당 가능.
    //   문자열은 함수 써서 할당해야 함. 포인터니까.
    strcpy(p1.name, "Leonardo DiCaprio");
    p1.age = 47;
    strcpy(p1.address, "Hollywood, USA");

    // 구조체 멤버 접근 시 . 으로 한다.
    printf("name    : %s\n", p1.name);
    printf("age     : %d\n", p1.age);
    printf("address : %s\n", p1.address);

    return 0;
}
// name    : Leonardo DiCaprio
// age     : 47
// address : Hollywood, USA

닫는 중괄호와 세미콜론 사이에 변수를 지정해줄 수 있다.

#include <stdio.h>
#include <string.h>  /* srtcpy */

struct School {
    char name[20];
    int age;
} scVal; // 구조체를 만드면서 변수 할당: 함수 밖에 있으니 전역변수이다.

int main(int argc, char *argv[]) {
    strcpy(scVal.name, "Hankook Univ.");
    scVal.age = 100;

    printf("name    : %s\n", scVal.name);
    printf("age     : %d\n", scVal.age);
    return 0;
}
// name    : Hankook Univ.
// age     : 100

멤버 초기화

struct 구조체이름 변수이름 = {.멤버이름1 = 값1, .멤버이름2 = 값2};
struct 구조체이름 변수이름 = {순서대로멤버값1, 순서대로멤버값2};

리터럴로 바로 할당된다. 그래서 strcpy 이런 거 필요없다.

#include <stdio.h>

struct Person {
    char name[20];
    int age;
    char address[100];
};

int main(int argc, char *argv[]) {
    // 점(.)으로 접근해 초기 할당하는 것은 순서 상관없다. 빼먹어도 된다.
    struct Person p1 = {.age = 47, .address = "Hollywood, USA", .name = "Leonardo DiCaprio"};

    // 그냥 쌩으로 나열해서 넣는 것은 정의 순서대로 넣어야 한다. 중간에 일부 아이템을 빠뜨리면 안 된다.
    struct Person p2 = {"Dwayne Johnson", 50, "Hollywood, USA"};

    printf("1 => %s, %d, %s\n", p1.name, p1.age, p1.address);
    printf("2 => %s, %d, %s\n", p2.name, p2.age, p2.address);

    return 0;
}
// 1 => Leonardo DiCaprio, 47, Hollywood, USA
// 2 => Dwayne Johnson, 50, Hollywood, USA
⚠️ **GitHub.com Fallback** ⚠️