A. 구조체의 기본
1. 구조체
a. 구조체란?
🌟 사용자가 C언어의 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 타입 = 사용자 정의 자료형이라고 부름
기본 타입만으로는 나타낼 수 없는 복잡한 데이터를 표현할 수 있음
또한 함수 리턴값으로 구조체를 사용하면 여러 개의 데이터를 한 번에 반환할 수 있음 (함수는 원래 하나의 값만 가능)
배열이 같은 타입의 변수 집합이라면, 구조체는 다양한 타입의 변수 집합을 하나의 타입으로 나타낸 것이때 구조체를 구성하는 변수를 구조체의 맴버 또는 맴버변수라고 함
b. 구조체의 정의
📘 문법
struct 구조체이름 //struct 키워드 : 구조체의 시작을 알림
{
멤버변수1의타입 멤버변수1의이름;
멤버변수2의타입 멤버변수2의이름;
...
}; //; : 구조체의 정의를 종료한다는 의미
🎨 도식화
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
'프로그래밍 언어 > C' 카테고리의 다른 글
[자료형(data type)] C 파생형 공용체와 열거체 (0) | 2023.08.17 |
---|---|
[자료형(data type)] C 구조체 배열과 구조체 포인터, 구조체 활용 (0) | 2023.08.17 |
[자료형(data type)] C 파생형 포인터와 배열 (0) | 2023.08.17 |
[자료형(data type)] C 파생형 포인터의 기본 (0) | 2023.08.17 |
[자료형(data type)] C 파생형 배열 총정리 (0) | 2023.08.17 |