# 구조체
- 구조체는 자료형이 상이한 복수의 멤버들을 하나의 자료로 묶어 처리할 수 있는 복합 자료형
- 선언 위치: 전처리기와 main 사이
- 예약어: struct
- 예시: 나이(age), 학년(grade), 전공(major) 세 개의 멤버를 갖는 학생(student) 구조체를 정의
// 구조체의 선언 1. 구조체의 이름을 줄 수 있음
struct student {
int age;
int grade;
char major[20]
}kim, lee;
// 구조체의 선언 2. 구조체 이름을 생략하고 구조체 변수를 생성
struct {
int age;
int grade;
char major[20];
}kim, lee;
// 구조체의 선언 3. 구조체 변수명이 생략되어 선언된 경우 --> struct 키워드를 붙여 선언해야 함
struct studnet {
int age;
int grade;
char major[20];
};
struct studnet kim, lee;
- 구조체 변수를 통하여 멤버에 값을 저장할 때는 점(.) 연산자를 이용함
student.grade = 3;
strcpy(kim.major, "Computer Science")
# 구조체 자료형 선언
- typedef 키워드: 긴 자료형 이름을 짧은 이름으로 대체하여 구조체 변수를 선언할 수 있게 해줌
// typedef를 사용한 구조체 선언 1
typedef struct student_type {
char name[10];
int grade;
char major[20];
} student;
// typedef를 사용한 구조체 선언 2
typedef struct {
char name[10];
int grade;
char major[20];
}student;
student kim, lee;
# 구조체의 할당과 비교
- 동일한 내용을 가지는 구조체 변수라도 각각 선언되었다면 할당할 수 없음
struct {
int id;
char name[15];
int score;
} kim = {1234567, “Kim”, 90};
struct {
int id;
char name[15];
int score;
} kim2;
kim2 = kim; // 컴파일 에러
- 동일한 자료형의 구조체 변수 간에 직접적인 할당 명령문은 허용
student kim, lee;
kim = lee; // 가능
- 구조체 변수 간 직접 비교는 허용되지 않음
> student_equal 함수와 같이 구조체 멤버별로 일치 여부를 비교해주어야 함
if(kim==lee) // ERROR
// student_equal
int student_equal(student kim, student lee) {
if (strcmp(kim.name, lee.name)) return FALSE;
if (kim.age != lee.age) return FALSE;
if (kim.grade != lee.grade) return FALSE;
return TRUE;
}
* strcmp: 값이 다르면 1, 같으면 0을 반환
# 내장형 구조체
- 내장형 구조체: 다른 구조체 변수를 멤버로 갖는 구조체
- 예시: 구조체 생성 프로그램
[코드]
#include<stdio.h>
#include<string.h>
typedef struct Contact_type {
char phone[20];
char email[20];
char address[20];
}Contact;
typedef struct Student_type {
char name[20];
int age;
char major[20];
int grade;
Contact contact;
}Student;
void main() {
Student kim;
strcpy(kim.name, "Bruce Lee");
kim.age = 22;
strcpy(kim.major, "Computer Science");
kim.grade = 3;
strcpy(kim.contact.phone, "010-1234-5678");
strcpy(kim.contact.email, "kim@naver.com");
strcpy(kim.contact.address, "Seoul, Korea");
printf("name: %s\n",kim.name);
printf("age: %d\n", kim.age);
printf("major: %s\n", kim.major);
printf("grade: %d\n", kim.grade);
printf("phone: %s\n", kim.contact.phone);
printf("email: %s\n", kim.contact.email);
printf("address: %s\n", kim.contact.address);
}
[실행결과]
'Study > Data Structure' 카테고리의 다른 글
[DS] Array (배열) & Multi-Dimensional Array (다차원 배열) (0) | 2021.08.25 |
---|---|
[DS] Pointer (포인터) (0) | 2021.08.25 |
[DS] 자료구조 개념 및 구현 Chapter 1 연습문제 (0) | 2021.08.25 |
[DS] Huffman Coding Tree (허프만 코딩 트리) (0) | 2021.08.25 |
[DS] 소수 찾기 (0) | 2021.08.25 |