프로그래밍 언어/C

[자료형(data type)] C 파생형 구조체 기본

순정법사 2023.08.17
더보기
자료형 중 파생형 구조체 공부 https://ddanzimind.tistory.com/32

 

A. 구조체의 기본

1. 구조체

a. 구조체란?

🌟 사용자가 C언어의 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 타입 = 사용자 정의 자료형이라고 부름

 

기본 타입만으로는 나타낼 수 없는 복잡한 데이터를 표현할 수 있음

또한 함수 리턴값으로 구조체를 사용하면 여러 개의 데이터를 한 번에 반환할 수 있음 (함수는 원래 하나의 값만 가능)

 

배열이 같은 타입의 변수 집합이라면, 구조체는 다양한 타입의 변수 집합을 하나의 타입으로 나타낸 것이때 구조체를 구성하는 변수를 구조체의 맴버 또는 맴버변수라고 함

 

b. 구조체의 정의

📘 문법

struct 구조체이름	//struct 키워드 : 구조체의 시작을 알림
{
    멤버변수1의타입 멤버변수1의이름;
    멤버변수2의타입 멤버변수2의이름;
    ...
};	//; : 구조체의 정의를 종료한다는 의미

 

🎨 도식화

 

book이라는 이름의 구조체를 정의하는 그림

 

c. 구조체의 선언

위와같이 구조체를 정의했다면, 아래와 같이 선언하여 사용할 수 있음

 

📘 문법

struct 구조체이름 구조체변수이름;

 

👉 구조체의 정의와 선언을 동시에 할수도 있음

 

📘 문법

struct 구조체이름
{
    멤버변수1의타입 멤버변수1의이름;
    멤버변수2의타입 멤버변수2의이름;
    ...
} 구조체변수이름;

🤓 예제

struct book
{
    char title[30];
    char author[30];
    int price;
} my_book;

 

d. typedef 키워드

🌟 이미 존재하는 타입에 새로운 이름을 붙일 때 사용

 

구조체 변수를 선언하거나 사용할때는 매번 struct 키워드를 사용해 구조체임을 명시해야 하지만

typedef 키워드를 사용해 선언하면 매번 struct  키워드를 사용하지 않아도 됨

 

📘 문법

typedef struct 구조체이름 구조체의새로운이름;

🤓 예제

typedef struct book TEXTBOOK;

 

👉 구조체의 정의와 선언을 동시에 할 수도 있음 (구조체의 이름을 생략 가능)

 

📘 문법

typedef struct (구조체이름) //구조체 이름 생략가능
{
    멤버변수1의타입 멤버변수1의이름;
    멤버변수2의타입 멤버변수2의이름;
    ...
} 구조체의새로운이름;

🤓 예제

typedef struct {
    char title[30];
    char author[30];
    int price;
} TEXTBOOK;

 

e. 구조체 멤버로의 접근방법

멤버 연산자(.)를 사용

 

구조체의 주소값과 구조체의 첫 번째 멤버 변수의 주소값은 언제나  같음

 

📘 문법

구조체변수이름.멤버변수이름

🤓 예제

my_book.author

 

f. 구조체 변수의 초기화

구조체 변수를 초기화 하는 두 가지 방법이 있음

 

1) 멤버 연산자 사용

 

  • 원하는 멤버 변수만을 초기화
  • 멤버 변수가 정의된 순서와 초기화하는 순서는 아무런 상관 ❌
  • 초기화하지 않은 멤버 변수는 0으로 초기화

 

2) 배열의 초기화 방법

 

  • 조체 정의에서 멤버 변수가 정의된 순서에 따라 차례대로 초깃값이 설정
  • 초기화하지 않은 멤버 변수는 0으로 초기화

 

📘 문법

1) 구조체변수이름 = {.멤버변수1이름 = 초깃값, .멤버변수2이름 = 초깃값, ...};

2) 구조체변수이름 = {멤버변수1의초깃값, 멤버변수2의초깃값, ...};
	//배열의 초기화와 같은 방법

🤓 예제 : 두 가지 방법을 사용하여 각각 구조체 변수를 초기화

#include <stdio.h>  

struct book
{
    char title[30];
    char author[30];
    int price;
};  

int main(void)
{
    struct book my_book = {"HTML과 CSS", "홍길동", 28000};	//1)
    struct book java_book = {.title = "Java language", .price = 30000};  //2)

    printf("첫 번째 책의 제목은 %s이고, 저자는 %s이며, 가격은 %d원입니다.\n",
        my_book.title, my_book.author, my_book.price);
        
    printf("두 번째 책의 제목은 %s이고, 저자는 %s이며, 가격은 %d원입니다.\n",
        java_book.title, java_book.author, java_book.price);
        
    return 0;
}

✨ 실행결과

첫 번째 책의 제목은 HTML과 CSS이고, 저자는 홍길동이며, 가격은 28000원입니다.

두 번째 책의 제목은 Java language이고, 저자는 이며, 가격은 30000원입니다.

 

👉 아래 예제는 위 예제와 같은 결과를 얻을 수 있음

 

🤓 예제 : typedef 키워드를 사용하여 새로운 이름을 선언

#include <stdio.h>  

typedef struct
{
    char title[30];
    char author[30];
    int price;
}  TEXTBOOK;  

int main(void)
{
    TEXTBOOK my_book = {"HTML과 CSS", "홍길동", 28000};
    TEXTBOOK java_book = {.title = "Java language", .price = 30000};  

    printf("첫 번째 책의 제목은 %s이고, 저자는 %s이며, 가격은 %d원입니다.\n",
        my_book.title, my_book.author, my_book.price);

    printf("두 번째 책의 제목은 %s이고, 저자는 %s이며, 가격은 %d원입니다.\n",
        java_book.title, java_book.author, java_book.price);

    return 0;
}

✨ 실행결과

첫 번째 책의 제목은 HTML과 CSS이고, 저자는 홍길동이며, 가격은 28000원입니다.

두 번째 책의 제목은 Java language이고, 저자는 이며, 가격은 30000원입니다.

 

 

 


출처 : http://www.tcpschool.com/c/c_struct_intro

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com