Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

문타쿠, 공부하다.

[C언어 코딩 도장] Unit 48. 구조체 사용하기 본문

C언어/C언어 코딩 도장

[C언어 코딩 도장] Unit 48. 구조체 사용하기

개발새발 문타쿠 2023. 10. 29. 02:42

INTRO

구조체란?

  • 자료를 체계적으로 관리하기 위한 문법
  • struct 키워드로 정의
struct Person
{
    char name[20];
    int age;
    char address[100];
};

48.1 구조체를 만들고 사용하기

방법 1) 구조체 정의와 구조체 변수 선언을 따로하기

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

// 구조체 정의
struct Person
{
    char name[20];      // 구조체 멤버 1
    int age;            // 구조체 멤버 2
    char address[100];  // 구조체 멤버 3
};

int main(void)
{
    // 구조체 변수 선언
    struct Person p1;

    // 점으로 구조체 멤버에 접근하여 값 할당
    strcpy(p1.name, "홍길동");
    p1.age = 30;
    strcpy(p1.address, "서울시 용산구 한남동");

    // 점으로 구조체 멤버에 접근하여 값 출력
    printf("이름: %s\n", p1.name);
    printf("나이: %d\n", p1.age);
    printf("주소: %s\n", p1.address);

    return 0;
}


방법 2) 구조체를 정의하는 동시에 변수를 선언하기

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

// 구조체 정의
struct Person 	 	
{        
    char name[20];     
    int age;            
    char address[100];  
} p1;                   // 구조체를 정의하는 동시에 변수 p1 선언

int main(void)
{
    // 점으로 구조체 멤버에 접근하여 값 할당
    strcpy(p1.name, "홍길동");
    p1.age = 30;
    strcpy(p1.address, "서울시 용산구 한남동");

    // 점으로 구조체 멤버에 접근하여 값 출력
    printf("이름: %s\n", p1.name);
    printf("나이: %d\n", p1.age);
    printf("주소: %s\n", p1.address);

    return 0;
}


방법 3) 구조체 변수를 선언하는 동시에 초기화하기

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

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

int main(void)
{
    // 방법 3-1
    struct Person p1 = { .name = "홍길동", .age = 30, .address = "서울시 용산구 한남동" };
    printf("이름: %s\n", p1.name);
    printf("나이: %d\n", p1.age);
    printf("주소: %s\n\n", p1.address);

    // 방법 3-2
    struct Person p2 = { "고길동", 40, "서울시 서초구 반포둥" };
    printf("이름: %s\n", p2.name);
    printf("나이: %d\n", p2.age);
    printf("주소: %s\n", p2.address);


    return 0;
}


48.2 typedef로 struct 키워드 없이 구조체 선언하기

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

// 구조체 이름은 _Person
typedef struct _Person 
{
    char name[20];
    int age;
    char address[100];
} Person;                   // typedef를 사용하여 구조체 별칭을 Person으로 정의

int main(void)
{
    Person p1;              // 구조체 별칭 Person으로 변수 선언
    
    strcpy(p1.name, "홍길동");
    p1.age = 30;
    strcpy(p1.address, "서울시 용산구 한남동");

    printf("이름: %s\n", p1.name);
    printf("나이: %d\n", p1.age);
    printf("주소: %s\n", p1.address);

    return 0;
}

48.3 익명 구조체 사용하기

익명 구조체란?

  • typedef 구조체 별칭을 정의할 때 구조체 이름을 지정하지 않아도 되는 것
  • 즉, typedef로 구조체를 정의하면서 이름을 생략할 수 있다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

// 구조체 이름이 없는 익명 구조체
typedef struct
{            
    char name[20];
    int age;
    char address[100];
} Person;                   // typedef를 사용하여 구조체 별칭을 Person으로 정의

int main(void)
{
    Person p1;              // 구조체 별칭 Person으로 변수 선언
    
    strcpy(p1.name, "홍길동");
    p1.age = 30;
    strcpy(p1.address, "서울시 용산구 한남동");

    printf("이름: %s\n", p1.name);
    printf("나이: %d\n", p1.age);
    printf("주소: %s\n", p1.address);

    return 0;
}

struct 태그 
{
	자료형 멤버이름;
};

typedef struct 태그 
{
	자료형 멤버이름;
} 타입이름;

// 태그와 타입이름은 같아도 괜춘

typedef struct 
{
	자료형 멤버이름;
} 타입이름;