Part 12 구조체와 공용체 ©우균, 창병모 ©우균, 창병모.

Slides:



Advertisements
Similar presentations
M 당 강령, 정책  비정규직과 정규직 간 차별철폐, 동일노동 동일 임금 실현, 최저임금제 현실화, 비정규직의 정규직화 추진 등을 통해 최소한의 인간다 운 생활을 보장한다.  그리고, 우리당은 지난 대선 당시 한국노 총, 민주노총과 정책협약을 통해 약속했던 것처럼.
Advertisements

11 주차 : Structures and Unions. 2 Introduction structure 는 다른 타입들의 변수를 모은 타입이며 그 타입들을 structure 의 멤버 라 한다. union 은 다른 타입의 여러 변수들을 하나 의 기억 장소에 보관함으로써 한.
UNIST 2015 Academic Calendar
영아반 Funny Shapes 영어 계획안 홍 하 유 치 원 Kids Brown Daily English Story time
요일과 월 Sun. Sunday 일요일 Mon. Monday 월요일 Tue. Tuesday 화요일
구조체란 무엇인가 ? 예: 학생관리 프로그램의 각 학생에 대한 기록(record) 구조체는 여러 자료형 변수들의 집합체이다.
Part 12 구조체와 공용체 안산1대학 디지털정보통신과 임 성 국.
쉽게 풀어쓴 C언어 Express 제13장 구조체 C Express.
제 11 장 구조체.
December 2011년 성주초 5학년2반 기념 달력 소비자의날 4 5 자원봉사자의날 6 7 대설
Sun Mon Tue Wed Thu Fri Sat
1 January 2 February 3 March 4 April 5 May 6 June 7 July 8 August
2013 January 2012년 도원초 4학년1반 기념 달력 1신정
쉽게 풀어쓴 C언어 Express 제13장 구조체 C Express Slide 1 (of 25)
C로 쉽게 풀어쓴 자료구조 © Copyright 생능출판사 2005
제2장 배열과구조.
Chapter 12 구조체와 열거형 구조체 열거형.
구조체 활용 구조체 활용.
쉽게 풀어쓴 C언어 Express 제13장 구조체 C Express.
쉽게 풀어쓴 C언어 Express 제13장 구조체 C Express.
제 6 장 데이터 타입 6.1 데이터 타입 및 타입 정보 6.2 타입의 용도 6.3 타입 구성자 6.4 사례 연구
DP&NM Lab Time Table (Spring 2006) MON TUE WED THU FRI SAT 9:00 10:00
Chapter 03 배열, 구조체, 포인터.
구조체 struct 구조체와 함수 구조체의 배열, sizeof 연산자 열거형 enum 형 정의 typedef
Part 14 파일 입출력 ©우균, 창병모 ©우균, 창병모.
자료 구조: Chapter 3 (2)구조체, 포인터
위모트 컨트롤을 이용한 “볼링” 학번: 이름: 김바울.
10장 메모리 관리.
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express.
동적메모리와 연결리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
3장. 포인터, 배열, 구조체 포인터, 배열, 구조체 학습목표 기본적 데이터 타입
C 9장. 구조체 #include <stdio.h> int main(void) { int num;
전사 회의체 운영 방안 Table of Contents 경영관리실 기획팀 Ⅰ. 전사 회의체 운영 현황
14주차.
제 3 장 상수와 변수
10월 Sun Mon Tue Wed Thu Fri Sat 중국 National Birthday 6 7 8
1 January 2 February 3 March 4 April 5 May 6 June 7 July 8 August
C#.
Work Progress ’ 나소라, 윤민.
Derived Types-- Enumerated, Structure and Union
★ 2015 석우초 4분기 방과후학교 영어교실 등록안내 ★
1차 발표: 프로젝트 소개 학번: 이름: 이철환.
Project Specification - 학사관리 시스템 과제 2번
배열과 연결리스트 연결리스트 배열 메모리 할당이 연속적이어서 인덱스 사용시 검색이 빠르다.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
비트 연산자와 열거형 비트 연산자는 이진 숫자의 문자열로 표현된 정수적 수식에 대한 연산을 수행한다.
November 일 월 화 수 목 금 토
좀비 . 그들과의 전쟁이 시작되었다. 마우스를 이용해서 집을 지킬 식물을 설치
신제품 개발의 정의 고객의 Needs & Wants 마케팅 활동의 출발은 신제품 개발로부터 시작합니다.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
북한에 대한 조사서 이리부천초등학교 2학년 2반 원선영 한국에서는 ‘인공기’, 북한에서는 ‘공화국 국기’라고 부른다.
4장 자료형.
1차 발표: 프로젝트 발표 학번: 이름: 권창민 1.
Pre-Production Meeting Book
C 프로그래밍 기초.
2 배열과 구조.
C89(C++03) 프로그래밍 (Part 2) 7 배열 8 변수 범위 9 포인터 10 유도 자료형.
자료구조 (Data Structure).
자바 5.0 프로그래밍.
2D 게임 프로그래밍 프로젝트 1차 발표 학번 : 이름 : 김태원.
2D game programing Demo 김태원.
컴퓨터 프로그래밍 기초 - 11th : 파일 입출력 및 구조체 -
제 8 장 포인터.
Structures Summary.
국어지도 유아교육과 권수연 김아람 중등특수교육과 박수진 양한솔
1차 발표: 프로젝트 발표 학번: 이름: 박진완.
개정판 누구나 즐기는 C언어 콘서트 제11장 구조체, 공용체, 열거형 출처: pixabay.
KSA 콜센터 교육일정 안내 2018년 3월 인세일즈 입문 콜센터 엑스퍼트 수퍼바이저(자격)
POWER POINT TEMPLATE 2019 CALENDAR.
Presentation transcript:

Part 12 구조체와 공용체 ©우균, 창병모 ©우균, 창병모

이 장의 내용 구조체 개요 구조체 배열과 포인터 구조체를 매개변수로 전달 공용체 ©우균, 창병모

12.1 구조체 개요 ©우균, 창병모

구조체란 무엇인가 ? 예: 학생관리 프로그램의 각 학생에 대한 기록(record) 구조체는 여러 자료형 변수들의 집합체이다. 한 학생에 대한 자료들을 한 곳에 모아서 관리하면 편리 한 학생의 이름, 학번, 나이, 전화번호, 전공 등 구조체는 여러 자료형 변수들의 집합체이다. 구조체 구문 구조 struct 구조체명 {    자료형1 멤버명1;    자료형2 멤버명2;        ... }; 멤버 변수 혹은 필드 변수 구조체를 구성하는 변수 ©우균, 창병모

구조체 정의 1 구조체 정의 구조체 변수 선언 struct student { int id; char name[20];     char major[20];  }; 구조체 변수 선언 struct student  s1, s2; ©우균, 창병모

구조체 정의 2 형정의(typedef) 사용하여 구조체 자료형 이름 정의 구조체 형 변수선언 typedef struct {     int id;       char name[20];      char major[20];  } STUD; 구조체 형 변수선언     STUD s1, s2; ©우균, 창병모

구조체 정의 3 구조체 정의할 때 변수 함께 선언 struct student { int id; char name[20];     char major[20];  } s1, s2; ©우균, 창병모

구조체 정의 4 구조체 이름을 붙이지 않고 구조체와 변수 동시 선언 struct { int id; char name[20];     char major[20];  } s1, s2; ©우균, 창병모

구조체 변수를 위한 기억공간 구조체 변수를 위한 기억공간 struct student 형의 변수를 위한 기억공간 할당 구조체의 각 멤버들을 위한 기억공간을 연속적으로 할당 struct student 형의 변수를 위한 기억공간 할당 ©우균, 창병모

©우균, 창병모

구조체 변수 사용 구조체 변수에 포함된 멤버 변수에 접근하기 위해서 점 연산자를 사용한다. 구문 형식 구조체변수.멤버명 예를 들어 ©우균, 창병모

©우균, 창병모

©우균, 창병모

구조체 대입 구조체 변수간의 대입이 가능하며 이 경우 모든 멤버가 한번에 대입된다. 예를 들어 struct student stud1, stud2; ... stud2 = stud1; ©우균, 창병모

구조체 포인터 구조체에 대한 포인터를 이용하여 구조체 참조 구조체 포인터 변수 선언 형식 예를 들어 struct 구조체명 *포인터명; 예를 들어 struct student stud1, stud2, *p; p = &stud2; ©우균, 창병모

구조체 포인터 사용 *p는 p가 가리키는 구조체 구조체 포인터 p가 가리키는 구조체 내의 멤버 구조체 포인터 연산자 -> (*p).id (*p).name (*p).major 주의! *p.id == *(p.id)의 의미 구조체 포인터 연산자 -> 구조체포인터->멤버명 == (*구조체포인터).멤버명 예를 들어  p->id   p->name ©우균, 창병모

12.2 구조체 배열과 포인터 ©우균, 창병모

구조체 배열 구조체 배열의 각 원소는 하나의 구조체이다. 구문 형식 struct 구조체명 배열명[원소의 개수]; 예를 들어 구조체 배열의 각 원소는 하나의 구조체이다.  구문 형식 struct 구조체명 배열명[원소의 개수]; 예를 들어 struct student s[100]; 예를 들어 stud 배열의 2번째 구조체의 멤버 사용         s[1].id   s[1].name  s[1].major ©우균, 창병모

구조체 배열 초기화 구조체 배열 초기화 예 {1401001, "박찬호", "정보과학"}, struct student stud[] = {    {1401001, "박찬호", "정보과학"}, {1401005, "김연아", "영문학"}, {1401008, "박세리", "정보과학"}, {1401015, "홍길동", "경영학"} }; ©우균, 창병모

©우균, 창병모

©우균, 창병모

구조체 포인터 배열 프로그램 12.3의 구조체 배열 struct student *s[100]; 실제 입력되는 학생 수에 관계없이 배열 크기 100 struct student *s[100]; 구조체의 배열이 아니라 구조체 포인터의 배열 필요할 때 malloc() 함수로 구조체 기억공간 할당 ©우균, 창병모

©우균, 창병모

©우균, 창병모

12.3 구조체를 매개변수로 전달 ©우균, 창병모

구조체를 매개변수로 전달 구조체 자체 혹은 구조체 포인터를 매개변수로 전달할 수 있다. (1) 구조체 자체를 매개변수로 전달하는 방법 함수를 정의할 때 구조체를 매개변수로 선언하고 함수가 호출될 때 실 매개변수로 구조체를 전달 실 매개변수 구조체의 모든 값이 형식 매개변수에 그대로 복사 (2) 구조체 포인터를 매개변수로 전달하는 방법 구조체의 포인터를 실 매개변수로 건네주어 이 포인터로 구조체를 참조하는 방법 구조체 전체를 복사할 필요가 없으므로 시간이 적게 든다. ©우균, 창병모

구조체 매개변수 예 구조체 자체를 매개변수로 전달하는 예 printStudent1(stud1); 구조체 포인터를 매개변수로 전달하는 예 printStudent2(&stud2); p = ( struct student *) malloc(sizeof(struct student *)); ... printStudent2(p); ©우균, 창병모

©우균, 창병모

©우균, 창병모

실행 결과 ©우균, 창병모

구조체 리턴 구조체 자체를 리턴할 수 있다. ©우균, 창병모

구조체 리턴 구조체에 대한 포인터를 리턴할 수 있다. ©우균, 창병모

©우균, 창병모

실행 결과 ©우균, 창병모

©우균, 창병모

©우균, 창병모

12.4 중첩 구조체 ©우균, 창병모

중첩 구조체(nested structure) 구조체의 멤버로서 다른 구조체를 사용할 수 있다. 복잡한 구조의 데이터를 관리하기 위해 예 struct date {    char month;    // 월     char day;    // 일 }; struct student {    int id;           char name[20];         struct date birthday;   } stud; ©우균, 창병모

중첨 구조체 접근 중첩 구조체에서 내부 구조체의 멤버 접근 예 외부_구조체명.내부_구조체명.멤버명 stud.birthday.month = 12;  ©우균, 창병모

©우균, 창병모

©우균, 창병모

중첩 구조체 다른 구조체에 대한 포인터를 구조체의 멤버로 사용 이 포인터ptr를 사용하기 위해서 struct student {    int id;           char name[20];         struct date *ptr;   } stud; 이 포인터ptr를 사용하기 위해서 이 포인터가 실제 date 구조체를 가리키고 있어야 한다. 예를 들어, stud.ptr = (struct date *) malloc(sizeof(struct date)); stud.ptr->month = 12; ©우균, 창병모

12.4 공용체 ©우균, 창병모

공용체(union) 구조체와 비슷하게 여러 개의 멤버 변수로 구성된다 한 순간에 하나의 멤버 변수만 사용할 수 있다. 공용체 정의 union 공용체명 {    자료형1 멤버명1;    자료형2 멤버명2;        : }; 공용체 변수 선언 union 공용체명 변수명; ©우균, 창병모

공용체 예 가격을 나타내는 공용체 가격은 원, 달러, 유로 중 하나로 표시 union price { int won; // 원     float dollar; // 달러     float euro;    // 유로 }; union price book_price; book_price.won = 10000; ©우균, 창병모

공용체 예 멤버 변수 won, dollar, euro가 모두 한 기억공간을 공유 주의 ! 공용체 내의 다른 멤버 변수에 새로이 데이터를 대입하면 기존의 데이터는 지워진다 dollar 값을 대입하면 won 값은 지워진다. book_price.won = 10000; book_price.dollar = 39.99; ©우균, 창병모

공용체 배열/포인터 공용체도 배열이나 포인터 형태로도 선언되어 사용될 수 있다. 예를 들어 공용체 배열 선언 공용체도 배열이나 포인터 형태로도 선언되어 사용될 수 있다.  예를 들어 공용체 배열 선언 union price book_prices[10];              공용체 포인터 및 변수 선언 union price book_price, *price_ptr;  공용체 주소를 공용체 포인터 변수에 대입   price_ptr = &book_price;                  ©우균, 창병모

12.6 자기 참조 구조체 ©우균, 창병모

자기참조 구조체 여러 권의 책에 대한 정보를 어떻게 저장해야 할까? 구조체 내에 자신을 가리킬 수 있는 포인터 변수를 선언 구조체 배열을 이용: 배열의 크기를 미리 정해야 한다. 보다 유연한 데이터 표현 방법이 필요하다. 구조체 내에 자신을 가리킬 수 있는 포인터 변수를 선언 struct book {     char title[50];     char author[20];           char publisher[20];                struct date pub_day;      struct book *next; }; ©우균, 창병모

자기참조 구조체 사용 struct book *ptr; // 첫 번째 책을 위한 구조체 생성 ptr = (struct book *) malloc(sizeof(struct book)); ...                                               // 첫 번째 책 자료 대입 // 두 번째 책을 위한 구조체 생성 ptr->next = (struct book *) malloc(sizeof(struct book));  ptr = ptr->next;                     // 두 번째 책 구조체를 포인터 ...                                                 // 두 번째 책 자료 대입 // 세 번째 책을 위한 구조체 생성 ptr->next = (struct book *) malloc(sizeof(struct book));                ptr = ptr->next;                           // 세 번째 책 구조체를 포인터 ...                                                // 세 번째 책 자료 대입 ©우균, 창병모

12.6 열거형 ©우균, 창병모

열거형(enumerated type) 열거형 열거형 정의 일련의 관련 정수 상수들의 집합을 하나의 자료형으로 정의 열거형은 자료형의 일종이므로 하나의 자료형으로 사용 특히 변수 값이 특정 집합으로 제한된 경우에 좋다. 열거형을 사용하면 코드가 보다 간결해지고 읽기 쉬워진다. 열거형 정의 enum 열거명 {     상수명 [= 정수값], ..., 상수명 [= 정수값] }; ©우균, 창병모

열거형 예 열거형 정의 실제로는 enum day 형의 변수 선언 enum day {     SUN, MON, TUE, WED, THU, FRI, SAT }; 실제로는    SUN = 0, MON = 1, TUE = 2, WED = 3, THU = 4, FRI = 5, SAT = 6 enum day 형의 변수 선언 enum day d1,d2; d1 = fri; ©우균, 창병모

열거형 이용 함수 다음 요일을 리턴하는 함수 next_day() enum day next_day(enum day d) {     return (enum day)((int)d+1); } ©우균, 창병모

열거형에서 초기화 열거형에서 상수명의 값을 초기화 가능하다. 열거형을 정의하면서 변수 선언도 함께 할 수도 있다. 열거형에서 상수명의 값을 초기화 가능하다. 열거형을 정의하면서 변수 선언도 함께 할 수도 있다. enum suit {     CLUB = 1, DIAMOND = 2, HEART = 3, SPADE = 4 } a, b, c; ©우균, 창병모

Key Point ©우균, 창병모

Key Point 구조체는 여러 자료형 변수들의 집합체이다. 구조체 변수에 포함된 멤버 변수에 접근하기 위해서 점 연산자를 사용한다. 구조체 배열의 각 원소는 하나의 구조체이다.  구조체 포인터를 사용하는 경우에는 구조체 포인터 연산자인 -> 연산자를 사용하여 멤버에 접근할 수 있다. 구조체 변수간의 대입이 가능하며 이 경우 모든 멤버가 한번에 대입된다. 구조체 자체 혹은 구조체 포인터를 매개변수로 전달할 수 있다. 공용체는 구조체와 비슷한데 한 순간에 하나의 멤버만 사용할 수 있다. 구조체의 멤버로서 다른 구조체를 사용할 수 있다. ©우균, 창병모

프로그래밍 실습 ©우균, 창병모

▶ 프로그래밍 실습 도서에 대한 데이터 입력 기능과 도서에 대한 열람 기능을 제공하는 간단한 도서관리 프로그램을 구현해보자. 이 프로그램은 크게 도서정보 입력과 도서 검색 기능을 제공한다. 1. 헤더 파일 book.h 작성 12장에서 정의한 struct book을 확장해서 book.h에 새로운 구조체를 작성한다. 2. 프로그램에서 다음과 같은 메뉴를 출력한다. 1. 도서 입력 2. 저자별 검색 3. 제목 검색 4. 끝 메뉴를 선택하세요: ©우균, 창병모

▶ 프로그래밍 실습 3. 새로운 책이 들어올 때마다 메뉴 1번을 선택하여 책에 대한 정보를 입력받는다. 책에 대한 정보는 제목, 저자, 출판사, 출판일, 가격 등이며 책이 들어오는 순서에 따라 일련번호를 붙인다. 책에 대한 정보는 struct book 형의 배열에 저장한다. 4. 메뉴 2번을 선택하면 저자명으로 도서 정보를 검색하여 출력해준다. 5. 메뉴 3번을 선택하면 책의 제목으로 도서 정보를 검색하여 출력해준다. ©우균, 창병모