10장. 구조체

Similar documents
[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

기초컴퓨터프로그래밍

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap09.ppt

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

ABC 9장

14 주차구조체와공용체

Microsoft PowerPoint - chap03-변수와데이터형.pptx

KNK_C_05_Pointers_Arrays_structures_summary_v02

윤성우의 열혈 TCP/IP 소켓 프로그래밍

Microsoft PowerPoint - chap10-함수의활용.pptx

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap09-1.ppt

Microsoft PowerPoint - chap06-1Array.ppt

C 언어와 프로그래밍 개요

K&R2 Reference Manual 번역본

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

C 언어와 프로그래밍 개요

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

11장 포인터

금오공대 컴퓨터공학전공 강의자료

슬라이드 1

8장. 포인터

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

슬라이드 1

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

02장.배열과 클래스

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

PowerPoint Presentation

OCW_C언어 기초

untitled

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

Microsoft PowerPoint - ch07 - 포인터 pm0415

슬라이드 1

Microsoft PowerPoint - 제11장 포인터

설계란 무엇인가?

Microsoft PowerPoint - 07_(C_Programming)_(Korean)_Composite_Data_Types

Lab 3. 실습문제 (Single linked list)_해답.hwp

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

OCW_C언어 기초

untitled

11장 포인터

금오공대 컴퓨터공학전공 강의자료

PowerPoint Template

Microsoft PowerPoint - chap06-5 [호환 모드]

Microsoft PowerPoint - chap12-고급기능.pptx

C 언어와 프로그래밍 개요

C++ Programming

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

Microsoft PowerPoint - additional01.ppt [호환 모드]

PowerPoint 프레젠테이션

11장 포인터

Microsoft PowerPoint - 제11장 포인터(강의)

Slide 1

PowerPoint 프레젠테이션

C 언어와 프로그래밍 개요

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

이번장에서학습할내용 구조체란무엇인가? 구조체의선언, 초기화, 사용 구조체의배열 구조체와포인터 구조체와함수 공용체 열거형 typedef 구조체는복잡한내용을일목요연하여정리하는데유용하게사용됩니다. 2

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조


Microsoft PowerPoint - chap11-포인터의활용.pptx

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

Microsoft PowerPoint - ch08 - 구조체 (structure) am0845

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

PowerPoint Presentation

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

PowerPoint Presentation

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

슬라이드 1

슬라이드 1

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

BMP 파일 처리

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

C 언어 프로그래밊 과제 풀이

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

PowerPoint 프레젠테이션

목차 배열의개요 배열사용하기 다차원배열 배열을이용한문자열다루기 실무응용예제 C 2

Data Structure

The Pocket Guide to TCP/IP Sockets: C Version

C 프로그래밊 개요

Microsoft PowerPoint - Chapter_09.pptx

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

OCW_C언어 기초

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

Microsoft PowerPoint - [2009] 02.pptx

PowerPoint Template

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

PowerPoint 프레젠테이션

PowerPoint Template

C++ Programming

The C++ Programming Language 4 장타입과선언 4.11 연습문제 Hello,world! 프로그램을실행시킨다. 프로그램이컴파일되지않으면 B3.1 을참고하자. #include<iostream> //#include 문, 헤더파일, 전처리지시

Transcription:

2019-1 st 프로그래밍입문 (1) 10 장. 구조체 박종혁교수 서울과학기술대학교컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

목차 구조체의기본 구조체의개념 구조체의정의 구조체변수의선언및초기화 구조체변수의사용 구조체변수간의초기화와대입 구조체변수의비교 typedef 구조체의활용 구조체배열 구조체포인터 함수의인자로구조체전달하기 비트필드 구조체의멤버로다른구조체변수사용하기 공용체와열거체 열거체 공용체 2

구조체의정의 서로다른데이터형의변수들을하나로묶어서사용하는기능 사용자정의형을만드는방법을제공 함께사용되는변수들을묶어서구조체를정의한다. struct contact 이새로운데이터형이된다. 3

구조체의필요성 int number; char name[10]; double grade; 4

구조체와배열 구조체 vs 배열 같은타입의집합 다른타입의집합 5

구조체의장점 통계자료나성적등과같이관련있는서로다른자료형을한덩어리 ( 집합 ) 로만들어처리 연관있는데이터를한덩어리로묶으면프로그램의관리와구현이용이 순서대로정렬 (sort) 하는경우구조체단위로처리되므로간단 네트워크프로그램을작성할때소켓이나헤더 (header) 의 format( 형식 ) 을구조체로묶어서처리 함수를반환할때한개의데이터가아닌구조체단위로묶어서전달할수있음 6

구조체정의문의위치 7

사용자정의형으로서의구조체 구조체를정의하면새로운데이터형이만들어짐 데이터형만정의할뿐구조체변수가생성되는것은아님 구조체의멤버는구조체변수를선언해야메모리에할당됨 sizeof 연산자로구조체의바이트크기를구할수있음 구조체의크기는멤버들의크기의합보다크거나같다. 구조체형은 struct 키워드와태그이름을함께사용해야함 태그명만사용하면안된다. 8

예제 : 구조체의정의 9

구조체변수의선언 (1/2) 구조체변수가메모리에할당될때구조체의멤버들이선언된순서대로메모리에할당됨 10

구조체변수의선언 (2/2) 구조체를정의하면서구조체변수를함께선언할수있음 구조체를정의하면서변수를함께선언할때는구조체의태그이름을생략할수있음 이름이없으므로나중에다시사용할수없다. struct app_info { char name[128]; char path[128]; int version; } this_app; struct { char name[128]; char path[128]; int version; } this_app; 구조체변수를함께선언한다. 11

구조체변수의초기화 (1/2) { } 안에멤버들의초기값을멤버가선언된순서대로나열 12

구조체변수의초기화 (2/2) 초기값이멤버의개수보다부족하면나머지멤버들은 0 으로초기화 멤버의개수보다초기값을더많이지정하면안됨 초기값으로 { 0 } 을지정하면모든멤버가 0 으로초기화 13

구조체변수의사용 구조체의멤버에접근하려면멤버접근연산자 (.) 를이용 구조체변수를여러개선언하면, 각각의구조체변수는서로다른메모리에할당됨 14

예제 : 구조체변수의선언및사용 15

멤버접근연산자 일반구조체멤버접근연산자 c1.pips = 3; c1.suit = 's'; c2.pips = c1.pips; c2.suit = c1.suit; 포인터를통한구조체멤버접근연산자 pointer_to_structure -> member_name 다른방법 (*pointer_to_structure).member_name 16

멤버접근연산자 - 예제 struct complex { double re; /* real part */ double im; /* imag part */ }; typedef struct complex complex; void add(complex *a, complex *b, complex *c) { a -> re = b -> re + c -> re; a -> im = b -> im + c -> im; } 17

멤버접근연산자 18

구조체변수간의초기화 구조체변수를다른구조체변수로초기화하면, 동일한멤버간에 1:1 로복사해서초기화함 19

구조체변수간의대입 같은구조체형의변수를대입할때도동일한멤버간에 1:1 로대입함 구조체변수를초기화할때처럼 { } 안에나열된값을대입할수는없음 구조체의멤버인배열끼리대입하는것은컴파일에러 20

예제 : 구조체변수간의초기화와대입 21

구조체변수의비교 구조체변수끼리직접관계연산자로비교해서는안됨 두구조체변수의값이같은지비교하려면구조체변수끼리비교하는대신멤버대멤버로비교해야함 22

예제 : 구조체변수의비교 같지않습니다.\n"); 23

typedef 기존의데이터형에대한별명 (alias) 24

typedef 의사용목적 : 이식성 이식성 : 하나의소스파일로여러플랫폼에서수정없이컴파일되고실행될수있는특성 25

typedef 의사용목적 : 가독성 1 바이트크기의 2 진데이터를저장하는변수선언 unsigned char 형을 byte 라는이름으로정의 2 진데이터값을저장하는용도로사용하는변수라는의미 26

구조체배열 (1/2) 같은구조체형의변수를여러개묶어서사용 27

구조체배열 (2/2) 구조체의멤버에접근하려면 arr[i].member 형식으로접근 28

예제 : 구조체배열 29

예제 : 구조체배열의검색 30

구조체포인터 구조체변수의주소를저장하는포인터 구조체포인터로구조체변수의멤버에접근하려면간접멤버접근연산자인 -> 연산자를사용 31

예제 : 구조체포인터 32

구조체포인터의활용 (1/2) CONTACT *recent = NULL; // 마지막으로검색한연락처를가리키는포인터 while (1) { printf( 이름 (. 입력시종료 )? ); scanf( %s, name); if (strcmp(name,. ) == 0) // name이. 이면 while 탈출 break; index = -1; // 이름을찾을수없으면 -1 for (i = 0; i < size; i++) {... } if (index >= 0) { // 검색성공 printf("%s의전화번호 : %s\n", arr[index].name, arr[index].phone); recent = &arr[index]; // recent는찾은원소를가리킨다. } else // 검색실패 printf(" 연락처를찾을수없습니다.\n"); } 33

구조체포인터의활용 (2/2) 34

예제 : 구조체포인터의활용 35

함수의인자로구조체전달하기 (1/3) 값에의한전달 구조체를복사해서전달 시간적 공간적성능저하 36

예제 : 구조체를값으로전달하는경우 37

함수의인자로구조체전달하기 (2/3) 포인터에의한전달 구조체를복사하지않고전달하려면포인터로전달 38

예제 : 구조체를포인터로전달하는경우 39

예제 : 구조체형의출력매개변수를가진함수의정의 40

함수의인자로구조체전달하기 (3/3) 구조체변수를함수의매개변수로전달하는방법 1. 함수의매개변수는구조체포인터형을선언 2. 구조체변수가입력매개변수일때는 const 키워드를지정 3. 구조체를매개변수로전달받는함수를호출할때는구조체변수의주소를인자로전달 4. 함수를정의할때는매개변수인포인터로구조체의멤버에접근 41

비트필드 (1/3) 구조체의멤버를비트단위로사용하도록설정할수있음 42

비트필드 (2/3) 비트필드멤버에주어진비트로표현할수있는범위를넘어서는값을저장하면오버플로우가발생 구조체안에일반멤버와비트필드를함께정의할수도있음 DATE dday; dday.year = 18; dday.month = 11; dday.day = 40; 오버플로우가발생해서 8 이된다. typedef struct date { unsigned short year : 7; unsigned short month : 4; unsigned short day : 5; char the_day_of_week[4]; } DATE; 일반멤버를함께정의할수있다. 43

예제 : 비트필드의정의및사용 44

비트필드 (3/3) 중간에일부비트를비워두고멤버를특정비트에할당할수있음 45

구조체의멤버로다른구조체변수사용하기 구조체변수안에다른구조체변수가멤버로포함될수있음 typedef struct point { int x, y; } POINT; typedef struct line { POINT start, end; } LINE; LINE ln1 = { {10, 20}, {30, 40} }; 입력매개변수이므로 const 포인터로전달 double get_length(const LINE *ln) { int dx = ln->end.x - ln->start.x; int dy = ln->end.y - ln->start.y; return sqrt(dx*dx + dy * dy); } 46

예제 : LINE 구조체의정의및사용 ( 47

열거체 정수형변수가특정값들중한가지값을가질때유용하게사용 정수형변수가가질수있는값들을열거상수로정의 48

열거체의정의 열거체는 C 컴파일러에의해 int 형으로처리됨 열거상수는정수형상수가됨 따로지정하지않으면열거상수는 0 부터 1 씩증가되는값으로정의됨 열거상수를특정값으로정의할수도있음 2 3 4 49

예제 : 열거체와열거상수의정의및사용 50

열거형과다른방법과의비교 정수사용기호상수열거형 switch(code) { case 1: printf( LCD TV\n ); break; case 2: printf( PDP TV\n ); break; } 컴퓨터는알기쉬우나사람은기억하기어렵다 #define LCD 1 #define PDP 2 switch(code) { case LCD: printf( LCD TV\n ); break; case PDP: printf( PDP TV\n ); break; } 기호상수를작성할때오류를저지를수있다 enum tvtype { LCD, PDP }; enum tvtype code; switch(code) { case LCD: printf( LCD TV\n ); break; case PDP: printf( PDP TV\n ); break; } 컴파일러가중복이일어나지않도록체크한다 51

공용체 (1/2) 공용체의멤버들은같은주소에할당되고, 서로메모리를공유함 52

공용체 (2/2) 공용체의크기는멤버중가장큰멤버의크기와같음 공용체의모든멤버는메모리를공유하기때문에주소가같음 공용체를초기화할때는 { } 안에첫번째멤버의초기값만지정 53

예제 : 공용체의정의및사용 54

공용체의사용예 COLOR_T c1; c1.rgb[0] = 0xFF; // red c1.rgb[1] = 0xAB; // green c1.rgb[2] = 0x1F; // blue c1.rgb[3] = 0x0; // not used printf("rgb color = %08X\n", c1.color); 001FABFF 출력 55

예제 : 공용체를이용한 RGB 색상표현 56

57

참고문헌 천정아, Core C Programming, 연두에디션 (2019) C 가보이는그림책, ANK Co., Ltd., 성안당 (2018) Greg Perry, Dean Miller 어서와 C 언어는처음이지, 천인국옮김, 인피니티북스 (2015) KELLEY ( 역 : 김명호외 ), A Book on C, 홍릉과학출판사 (2003) 윤성우, 열혈 C 프로그래밍, 오렌지미디어 천인국, 쉽게풀어쓴 C 언어 Express, 생능출판사 서현우, 뇌를자극하는 C 프로그래밍, 한빛미디어 강성수, 쾌도난마 C 프로그래밍, 북스홀릭 고응남, C 프로그래밍기초와응용실습, 정익사 58