Chapter 11 구조체
01. 구조체의 개요 구조체 : C 언어에서 사용 가능한 자료형들을 모아서 하나의 자료형으로 정의 배열 : 동일한 형태의 데이터를 여러 개 모아서 하나의 자료 구조로 표현 구조체 : 서로 다른 형태의 데이터를 여러 개 모아서 하나의 자료 구조로 표현 구조체의 선언과 구조체(형) 변수 선언
01. 구조체의 개요
02. 구조체의 사용 – 2.1 구조체 선언 및 구조체 변수의 선언 구조체의 선언 구조체를 선언할 때는 예약어 struct를 사용 구조체 이름은 구조체의 형태를 식별하기 위한 것으로 식별자의 규칙에 따라 지정 구조체 각각의 구성 요소는 형과 식별자로 선언 선언을 하고 나서 마지막에는 반드시 ;(쌍반점)을 붙인다 C 언어는 구조체 선언을 하나의 문장으로 취급
02. 구조체의 사용 – 2.1 구조체 선언 및 구조체 변수의 선언 구조체의 선언의 예 구조체를 선언한 뒤, 선언된 형으로 다음과 같이 구조체 변수를 선언하고 사용 구조체 변수 : struct 예약어와 구조체의 이름을 같이 사용하여 선언
02. 구조체의 사용 – 2.1 구조체 선언 및 구조체 변수의 선언 구조체의 선언의 예(구조체 선언과 변수 선언을 동시에)
02. 구조체의 사용 – 2.1 구조체 선언 및 구조체 변수의 선언 구조체의 선언의 예(구조체 이름을 생략하고 구조체의 구성 요소와 구조체 변수만 선언)
02. 구조체의 사용 – 2.2 typedef를 사용한 구조체 선언 C 언어는 프로그램의 가독성과 이식성을 높이기 위해 typedef라는 기능을 제공 typedef는 모든 자료형을 사용자가 지정하는 자료형으로 다시 정의하는 기능을 제공 typedef을 잘 이용하면 프로그램의 가독성과 이식성을 향상 시킬 수 있다
02. 구조체의 사용 – 2.2 typedef를 사용한 구조체 선언 구조체 자료형을 하나의 이름으로 지정함으로써 구조체 자료형의 변수를 간단하게 선언할 수 있다
02. 구조체의 사용 – 2.3 구조체의 초기화와 사용 구조체를 선언한 뒤에는 초기화 과정을 거쳐야 한다 일괄 초기화 : 구조체 전체 요소를 한번에 초기화 하는 방법 멤버단위 초기화 : 구조체의 각 멤서(요소) 단위로 초기화 하는 방법
02. 구조체의 사용 – 2.3 구조체의 초기화와 사용 – 2.3.1 일괄 초기화 구조체의 일괄 초기화
02. 구조체의 사용 – 2.3 구조체의 초기화와 사용 – 2.3.1 일괄 초기화 구조체의 일괄 초기화(구조체 선언과 구조체 변수 선언, 구조체의 일괄 초기화를 하나의 문장으로 처리)
02. 구조체의 사용 – 2.3 구조체의 초기화와 사용 – 2.3.2 멤버 단위로 초기화 구조체에 대해 멤버(요소) 단위로 초기화를 수행 가능 구조체의 멤버에 접근하기 위해 .(마침표) 연산자를 사용 구조체의 멤버가 문자 배열인 경우 배열 이름은 주소를 가리키는 상수이므로 직접 문자열로 치환될 수 없으며, strcpy() 함수를 사용하여 문자열을 복사
02. 구조체의 사용 – 2.3 구조체의 초기화와 사용 – 2.3.2 멤버 단위로 초기화 예제 11-1
02. 구조체의 사용 – 2.3 구조체의 초기화와 사용 – 2.3.2 멤버 단위로 초기화 예제 11-2
02. 구조체의 사용 – 2.4 구조체의 크기 sizeof 연산자로 구조체의 크기를 알 수 있다 C 언어는 구조체를 정의할 때 구성 요소를 비트 단위로 설정하는 방법을 제공 멤버의 크기를 비트 단위로 지정함으로써 메모리를 절약 비트 단위로 지정하려면 멤버 이름 다음에 :(쌍점)과 비트 수를 지정 위와 같이 구조체를 정의하면 하나의 구조체 크기는 35바이트(정확하게는 34바이트 6비트) 정도가 되지만 크기를 출력해보면 40바이트가 출력 그 이유는 메모리의 관리가 비트 단위가 아니라 바이트 단위 또는 워드(16비트, 32비트, 64비트) 단위로 이뤄 지기 때문 비트 단위로 구조체를 지정하는 것은 int형과 unsigned형만 가능 비트 단위로 구조체를 지정하면 메모리를 절약할 수 있는 반면에 프로그램의 이식성이 떨어지고 비트 단위 계 산에 시간이 더 소요된다는 단점이 있다.
02. 구조체의 사용 – 2.4 구조체의 크기 예제 11-3
03. 구조체의 응용 – 3.1 함수와 구조체 구조체를 이용한 응용 함수와 구조체 구조체가 함수의 인수로 사용될 때의 구조체 포인터, 구조체 배열, 구조체 리스트 등등 함수와 구조체 함수의 인수로 구조체를 전달 가능 함수의 인수로 구조체를 사용하려면 구조체를 전역 변수 선언 영역에 선언해 함수의 인수로 구조체가 전달되면 구조체의 모든 멤버가 복사되어 함수로 전달 즉 구조체는 하나의 형으로 취급되기 때문에 주소에 의한 호출이 아니라 값에 의한 호출로 처리
03. 구조체의 응용 – 3.1 함수와 구조체 예제 11-4
03. 구조체의 응용 – 3.1 함수와 구조체 예제 11-5
03. 구조체의 응용 – 3.2 구조체 포인터 함수의 매개변수로 구조체 주소를 이용한 구조체 포인터를 사용 가능 구조체의 주소만 넘겨주면 되므로 멤버의 복사에 시간이 걸리지 않는다 주소만 전달. 호출된 함수에서 구조체의 값이 바뀌면 호출한 함수의 구조체 값도 바뀐다(주소에 의한 호출) 일반 구조체와 구조체 포인터를 사용할 때 멤버에 접근하는 연산자에 차이 일반 구조체의 멤버 접근 연산자는 .(마침표) 연산자 사용 구조체 포인터를 사용한 멤버의 접근에는 ->(화살표) 연산자 사용
03. 구조체의 응용 – 3.2 구조체 포인터 예제 11-6
03. 구조체의 응용 – 3.3 구조체 배열 구조체도 하나의 형이기 때문에 배열로 선언하여 사용 가능 예제 11-7
03. 구조체의 응용 – 3.3 구조체 배열 예제 11-7 계속
03. 구조체의 응용 – 3.3 구조체 배열 예제 11-7 계속
03. 구조체의 응용 – 3.3 구조체 배열 예제 11-8
03. 구조체의 응용 – 3.3 구조체 배열 예제 11-8 계속
03. 구조체의 응용 – 3.4 구조체와 리스트 구조체의 한 멤버로 같은 구조체의 포인터를 정의 하나의 구조체가 동일 구조의 다른 구조체를 가리키는 형태 위 과정을 반복하여 리스트를 구성
03. 구조체의 응용 – 3.4 구조체와 리스트 구조체 리스트 구조체의 멤버로 동일한 형태의 구조체 포인터를 선언하고 그 포인터에 다음 구조체의 주소를 배정하여 구성
03. 구조체의 응용 – 3.4 구조체와 리스트 예제 11-9
03. 구조체의 응용 – 3.4 구조체와 리스트 예제 11-9 계속
03. 구조체의 응용 – 3.5 구조체와 날짜 및 시간 관련 라이브러리 함수 03. 구조체의 응용 – 3.5 구조체와 날짜 및 시간 관련 라이브러리 함수 8장에서 날짜와 시간 관련 라이브러리 함수를 제공하는 <time.h> 함수 소개 날짜 및 시간 관련 라이브러리 함수는 응용 프로그램을 개발할 때 자주 사용 현재 시간을 반환하는 localtime() 함수는 현재 시간을 <time.h>에 정의된 tm 구조체로 반환하고, strftime() 함수는 tm 구조체에 저장된 정보를 특정 형식의 문자열로 변환하여 반환
03. 구조체의 응용 – 3.5 구조체와 날짜 및 시간 관련 라이브러리 함수 03. 구조체의 응용 – 3.5 구조체와 날짜 및 시간 관련 라이브러리 함수 <time.h>에 정의된 tm 구조체
03. 구조체의 응용 – 3.5 구조체와 날짜 및 시간 관련 라이브러리 함수 03. 구조체의 응용 – 3.5 구조체와 날짜 및 시간 관련 라이브러리 함수
03. 구조체의 응용 – 3.5 구조체와 날짜 및 시간 관련 라이브러리 함수 03. 구조체의 응용 – 3.5 구조체와 날짜 및 시간 관련 라이브러리 함수 예제 11-10
03. 구조체의 응용 – 3.5 구조체와 날짜 및 시간 관련 라이브러리 함수 03. 구조체의 응용 – 3.5 구조체와 날짜 및 시간 관련 라이브러리 함수 예제 11-11
04. 공용체 구조체 : 서로 다른 형의 데이터를 모아서 하나의 자료 구조로 사용 공용체 : 하나의 데이터에 대해 서로 다른 형태의 데이터로 사용 공용체의 선언과 사용법은 구조체와 동일하지만 예약어 union을 사용 위의 예를 살펴보면 2개의 멤버를 가진 공용체가 하나의 값을 유지 2개의 멤버 이름으로 접근이 가능하지만, 두 멤버는 같은 기억 장소를 공유하여 항상 같은 값 유지
04. 공용체 예제 11-12
05. 열거형 열거형enumerated type : 순서가 있는 데이터들을 열거하여 하나의 형으로 정의 열거형은 정숫값을 가지며, 선언하는 방법은 구조체와 같다. 열거형을 선언할 때는 예약어 enum을 사용
05. 열거형 열거형은 정수형으로서 심벌릭 매크로와 유사한 기능 일반적으로 적은 수의 열거에는 심벌릭 매크로를 사용 의미 있는 열거에는 열거형을 사용 요일과 같이 의미 있는 순서를 가진 데이터에는 열거형을, 최댓값과 최솟값 같은 적은 수의 열거에는 심벌릭 매크로를 사용하는 것이 좋다
05. 열거형 예제 11-13