2016년2학기 고급컴퓨터프로그래밍및실습 (36342-02)
제9장 구조체
1
•
구조체
• 구조체 변수, 초기화
• 구조체 배열, 구조체 포인터
•
공용체와 열거체
•
typedef
목차
2
구조체 : 관련 변수의 묶음
3
구조체의 정의
새로운 데이터형을 선언하는 것이다.
메모리는 구조체형 변수를 선언할 때 할당된다.
구조체의 멤버 : 변수, 배열, 포인터 등
4
구조체의 크기
구조체의 크기는 모든 멤버들의 크기의 합보다 크거나 같다.
메모리 정렬 때문에 멤버들 사이에 패딩이 들어갈 수도 있다.
구조체의 크기를 구하려면 sizeof 연산자를 이용해야 한다.
5
구조체 변수의 선언(1/3)
6
구조체 변수의 선언(2/3)
7
구조체 변수의 선언(3/3)
구조체를 정의하면서 구조체 변수를 함께 선언할 수 있다.
구조체를 정의와 변수를 함께 선언할 때 태그명을 생략할 수 있다.
8
구조체 변수의 사용(1/2)
구조체의 멤버에 접근할 때는 멤버 접근 연산자인 .를 이용한다.
9
구조체 변수의 사용(2/2)
10
구조체 변수의 초기화
{ } 안에 멤버들의 초기값을 순서대로 나열한다.
{ } 안에 지정한 초기값이 멤버의 개수보다 부족하면 나머지 멤버들은 0 으로 초기화된다.
11
student 구조체의 정의 및 사용 예(1/2)
12
구조체의 정의
구조체 변수의 선언
구조체 변수의 선언 및 초기화
student 구조체의 정의 및 사용 예(2/2)
13
point 구조체 정의, 사용 예
14
구조체의 정의
구조체 변수의 선언
구조체 변수의 값 입력 수학 관련 라이브러리 헤더
구조체 변수의 값 입력
두 점 사이의
거리 구하기
구조체 간의 초기화 및 대입(1/2)
같은 구조체형의 변수들끼리는 서로 초기화나 대입이 가능하다.
구조체간의 초기화 : 멤버 대 멤버 초기화
동일한 멤버 간에 1:1로 복사해서 초기화
구조체간의 대입 : 멤버 대 멤버 대입
15
구조체 간의 초기화 및 대입(2/2)
16
구조체 간의 초기화 및 대입
17
구조체 변수의 선언 및 초기화 구조체 간의 초기화
구조체 간의 대입
구조체 간의 비교
구조체 변수 간에는 직접 비교 연산을 할 수 없다.
두 구조체 변수의 값이 같은지 비교하려면 구조체 변수끼리 비교하는 대신 멤버 대 멤버로 비교해야 한다.
18
구조체 배열(1/3)
19
구조체 배열(2/3)
구조체 배열 원소의 멤버 접근
20
구조체 배열(3/3)
21
구조체 배열 초기화
구조체 배열을 이용한 성적 처리 프로그램(1/3)
22
구조체의 정의 구조체 배열의 크기
구조체 배열의 선언
구조체 배열을 이용한 성적 처리 프로그램(2/3)
23
구조체 배열의 입력
학생별 평균 계산
학급 평균 계산
구조체 배열을 이용한 성적 처리 프로그램(3/3)
24
구조체 배열의 출력
구조체 포인터(1/2)
구조체 변수의 주소를 저장하는 포인터
25
구조체 포인터(2/2)
구조체 포인터로 구조체의 멤버에 접근할 때는 -> 연산자를 사용한다.
구조체 변수로 멤버에 접근할 때는 . 연산자를 사용한다.
26
구조체 포인터의 사용 예(1/2)
27
구조체의 정의
구조체 포인터를 매개변수로 갖는 함수 선언
구조체 변수의 주소를 함수의 인자로 전달
구조체 포인터의 사용 예(2/2)
28
구조체 포인터를 인자로 갖는
함수 정의
비트필드(1/3)
구조체가 가진 멤버를 비트 단위로 사용한다.
비트필드 정의: 멤버 이름 다음에 :을 쓰고 비트 수를 적는다.
29
비트필드(2/3)
메모리에 할당할 때, 첫 번째 멤버를 최하위 비트에서부터 할당한다.
비트필드의 멤버에 주어진 비트로 표현 가능한 범위 밖의 값을 저장하면 오 버플로우가 발생한다.
비트필드도 구조체와 같은 방법으로 사용한다.
30
비트필드(3/3)
비트필드를 정의할 때는 중간에 일부 비트를 비워두고 멤버를 특정 비트에 할당할 수있다.
31
비트필드의 사용 예
32
비트필드의 정의
비트필드 변수의 선언
비트필드의 크기
공용체와 열거체
공용체: 여러 멤버들이 메모리를 공유해서 사용한다.
공용체를 정의하면 공용체도 구조체처럼 새로운 데이터형이 된다.
33
공용체의 사용(1/3)
공용체 변수의 멤버들은 모두 같은 주소에 할당된다.
공용체의 크기 : 멤버 중 가장 큰 멤버의 크기
34
공용체의 사용(2/3)
공용체 변수를 초기화할 때는 첫 번째 멤버의 초기값만 지정한다.
공용체의 멤버에 접근할 때도 . 와 -> 연산자를 사용한다.
35
공용체의 사용(3/3)
공용체의 멤버들은 동시에 사용되지 않는다.
job_code가 0이면 job_info 공용체 변수의 school_name을 사용하고, job_code가 1이면 company_name을 사용한다.
공용체의 멤버인 school_name과 company_name이 동시에 사용되는 경우는 없으며, 항상 둘 중 한 가지 값을 저장하는 용도로 사용된다.
36
공용체의 사용 예
37
구조체와 공용체의 비교
38
공용체의 정의
구조체의 정의
열거체
나열된 정수 값 중 하나를 갖는 정수형의 일종
39
열거체의 사용
열거체도 일종의 사용자 정의형이므로 열거체를 일단 정의하고 나면, 열 거체형의 변수를 선언하거나 배열 또는 구조체를 선언할 수 있다.
열거체 변수에는 열거체 정의에 나열된 열거 상수 중 하나를 저장하고 사 용한다.
열거 상수만 정수형 상수로 정의할 수도 있다.
열거체와 열거 상수는 프로그램의 가독성(readability)을 향상시키는 기능 이다.
40
열거체의 사용
41
typedef
typedef는 기존의 데이터형에 새로운 이름을 붙인다.
42
구조체와 typedef
구조체, 공용체, 열거체를 정의할 때, typedef가 유용하게 사용된다.
typedef 정의 후에도 원래 데이터형을 그대로 사용할 수도 있다.
43
typedef 사용 예
44
typedef 정의
같은 구조체 변수 간의 대입 구조체의 정의
typedef 사용 목적 (1/2)
프로그램의 이식성을 향상시키기 위한 목적으로 사용된다.
45
typedef 사용 목적 (2/2)
프로그램의 가독성을 향상시키기 위한 목적으로 사용된다.
46