Microsoft PowerPoint - chap09.ppt

Similar documents
ABC 9장

슬라이드 1

슬라이드 1

10장. 구조체

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

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

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

Microsoft PowerPoint - chap06-2pointer.ppt

기초컴퓨터프로그래밍

OCW_C언어 기초

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

14 주차구조체와공용체

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

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

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

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

K&R2 Reference Manual 번역본

KNK_C_05_Pointers_Arrays_structures_summary_v02

Microsoft PowerPoint - chap04-연산자.pptx

PowerPoint 프레젠테이션

슬라이드 1

C 프로그래밊 개요

Chapter 4. LISTS

Microsoft PowerPoint - chap06-1Array.ppt

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

11장 포인터

Microsoft PowerPoint - chap09-1.ppt

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

PowerPoint 프레젠테이션

03_queue

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

ABC 10장

Chapter 4. LISTS

ABC 2장

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

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

Slide 1

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

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

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

PowerPoint 프레젠테이션

Microsoft PowerPoint - ch07 - 포인터 pm0415

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

03장.스택.key

PowerPoint Presentation

11장 포인터

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

PowerPoint Presentation

슬라이드 1

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

chap 5: Trees

OCW_C언어 기초

untitled

11장 포인터

Microsoft PowerPoint - C++ 5 .pptx

untitled

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

슬라이드 1

Microsoft PowerPoint - Chapter_09.pptx

02장.배열과 클래스

int main(void) int a; int b; a=3; b=a+5; printf("a : %d \n", a); printf("b : %d \n", b); a b 3 a a+5 b &a(12ff60) &b(12ff54) 3 a 8 b printf(" a : %x \

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

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

Microsoft PowerPoint - chap03.ppt

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

Microsoft PowerPoint - Chapter_04.pptx

슬라이드 1

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

OCW_C언어 기초

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

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

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

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

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

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

PowerPoint 프레젠테이션

Microsoft PowerPoint - 제3장-배열.pptx

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

슬라이드 1

본 강의에 들어가기 전

PowerPoint Presentation

Microsoft PowerPoint - chap06.ppt

1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-

슬라이드 1

ABC 3장

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

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

06장.리스트

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

<342EBAAFBCF620B9D720B9D9C0CEB5F92E687770>

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

Microsoft PowerPoint - 05-chap03-ArrayAndPointer.ppt

Frama-C/JESSIS 사용법 소개

C 언어의구성요소인상수, 변수, 입 출력함수에 대하여학습

06 세상을 변화시키는 연산자

chap x: G입력

untitled

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

Transcription:

2010-1 학기프로그래밍입문 (1) 9 장구조체와공용체 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 0

C 언어의확장방법 - 매크로와라이브러리 구조체와공용체 - 사용자정의형 ( 배열, 구조체, 공용체 ) A Book on C, 4ed. 9-1

구조체 서로다른형의변수들을하나로묶어주는방법 예제 - 카드 A Book on C, 4ed. 9-2

구조체 예제 - 카드 -각카드는고유의무늬와숫자를가짐 구조체를사용하여표현하면효율적 - 카드를위한구조체선언 struct card { int pips; char suit; }; A Book on C, 4ed. 9-3

예제 - 카드 struct card { }; int pips; char suit; 구조체선언 -struct : 키워드 -card : 구조체태그이름 -pips, suit : 구조체멤버 * 이것은 struct card 형의정의이고, 변수선언은아님 A Book on C, 4ed. 9-4

구조체변수선언방법 1 struct card 형변수 c1, c2 struct card { int pips; char suit; }; struct card c1, c2; A Book on C, 4ed. 9-5

구조체변수선언방법 2 struct card 형변수 c1, c2 struct card { int pips; char suit; } c1, c2; A Book on C, 4ed. 9-6

구조체변수선언방법 3 struct card 형변수 c1, c2 struct card { int pips; char suit; }; typedef struct card card; card c1, c2; A Book on C, 4ed. 9-7

구조체변수선언방법 4 struct card 형변수 c1, c2 typedef struct { int pips; char suit; } card; card c1, c2; A Book on C, 4ed. 9-8

구조체변수선언방법 5 struct 형변수선언 struct { int pips; char suit; } c1, c2; - 구조체태그이름이없음에주의 - C1, c2와같은형의변수는다시는선언할수없음 A Book on C, 4ed. 9-9

구조체변수선언방법 struct { int pips; char suit; } c1, c2; struct { int pips; char suit; } c3, c4; * c1, c2 는 c3, c4 와는다른형임 A Book on C, 4ed. 9-10

구조체멤버 한구조체내에서멤버이름은유일해야하나, 서로다른구조체에서는같은멤버이름을사용할수있음 struct fruit { char *name; int calories; }; struct vegetable { char *name; int calories; }; struct fruit a; struct vegetable b; A Book on C, 4ed. 9-11

멤버접근연산자. 일반구조체멤버접근연산자 c1.pips = 3; c1.suit = 's'; c2.pips = c1.pips; c2.suit = c1.suit; A Book on C, 4ed. 9-12

멤버접근연산자 -> 포인터를통한구조체멤버접근연산자 pointer_to_structure -> member_name 다른방법 (*pointer_to_structure).member_name A Book on C, 4ed. 9-13

멤버접근연산자 -> 예제 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; } A Book on C, 4ed. 9-14

멤버접근연산자 선언문과배정문 struct student tmp, *p = &tmp; tmp.grade = 'A'; tmp.last_name = "Casanova"; tmp.student_id = 910017 수식 tmp.grade tmp.last_name (*p).student_id *p -> last_name + 1 *(p -> last_name + 2) 동등한수식 p -> grade p -> last_name p -> student_id (*(p -> last_name)) + 1 (p -> last_name)[2] 개념적값 A Casanova 910017 D s A Book on C, 4ed. 9-15

연산자의우선순위와결합법칙 연산자 () []. -> ++ ( 후위 ) -- ( 후위 ) ++ ( 전위 ) -- ( 전위 )! ~ sizeof ( 형 ) + ( 단항 ) - ( 단항 ) & ( 주소 ) * ( 역참조 ) * / % + - << >> < <= > >= ==!= & ^ &&?: = += -= *= /= %= <<= >>= &= ^= =, ( 콤마연산자 ) 결합법칙좌에서우로우에서좌로좌에서우로좌에서우로좌에서우로좌에서우로좌에서우로좌에서우로좌에서우로좌에서우로좌에서우로좌에서우로우에서좌로우에서좌로좌에서우로 A Book on C, 4ed. 9-16

함수에서구조체 구조체는함수의인자로써함수에전달될수있고, 함수로부터리턴될수도있음 함수의인자로서구조체가전달될때구조체는값으로전달됨 구조체가많은멤버를가지거나, 큰배열을멤버로가질경우, 함수의인자로구조체를전달하는것은상대적으로비효율적임 따라서대부분의응용프로그램에서는함수의인자로구조체의주소를사용함 A Book on C, 4ed. 9-17

함수에서구조체예제 typedef struct { char name[25]; int employee_id; struct dept department; struct home_address *a_ptr; double salary;... } employee_data; * department 멤버는그자체가구조체이고, 컴파일러는각멤버의크기를미리알아야하므로 struct dept에대한선언이먼저와야함 A Book on C, 4ed. 9-18

함수에서구조체예제 함수선언방법 1 employee_data update(employee_data e){... printf("input the department number: "); scanf("%d", &n); e.department.dept_no = n;... return e; } * 함수호출 employee_data e; e = update(e); A Book on C, 4ed. 9-19

함수선언방법 2 함수에서구조체예제 Void update(employee_data *p) {... printf("input the department number: "); scanf("%d", &n); p->department.dept_no = n;... } * 함수호출 employee_data e; update(&e); A Book on C, 4ed. 9-20

구조체의초기화 card c = {13, 'h'}; /* the king of hearts */ complex a[3][3] = { {{1.0, -0.1}, {2.0, 0.2}, {3.0, 0.3}}, {{4.0, -0.4}, {5.0, 0.5}, {6.0, 0.6}}, }; /* a[2][] is assigned zeroes */ struct fruit frt = {"plum", 150}; struct home_address { char *street; char *city_and_state; long zip_code; } address = {"87 West Street", "Aspen, Colorado", 80526}; struct home_address previous_address = {0}; A Book on C, 4ed. 9-21

union 공용체 공용체는구조체와비슷한구문형식을가지지만각멤버들은같은기억장소를공유함 공용체형은메모리의같은위치에저장될여러값의 집합을정의 저장된값을올바르게해석하는것은프로그래머의책 임 A Book on C, 4ed. 9-22

예제 union int_or_float { int i; float f; }; - union : 키워드 공용체선언 - int_or_float : 공용체태그이름 - i, f : 공용체멤버 * int_or_float 형변수는 MAX(sizeof(int), sizeof(float)) 만큼의메모리할당될것임 A Book on C, 4ed. 9-23

공용체변수선언 공용체변수선언 union int_or_float a, b, c; - 이선언으로식별자 a, b, c 에대한기억장소가할당 컴파일러는공용체의멤버중에서가장큰기억장소를요구하는멤버의요구만큼기억장소를할당 공용체의멤버접근방법은구조체의멤버접근방법과동일 A Book on C, 4ed. 9-24

공용체예제 int main(void) { union int_or_float n; n.i = 4444; printf("i: %10d f: %16.10e\n", n.i, n.f); n.f = 4444.0; printf("i: %10d f: %16.10e\n", n.i, n.f); return 0; } 출력결과예 : i: 4444 f: 0.6227370375e-41 i: 1166729216 f: 4.4440000000e+03 A Book on C, 4ed. 9-25

비트필드 구조체나공용체에서 int 형이나 unsigned 형의멤버에비트수 ( 폭 ) 를지정하는것 폭은콜론다음에음수가아닌정수적형상수수식으로지정되고, 최대값은기계워드의비트수와같음 일반적으로비트필드는구조체의연속적인멤버로선언되며, 컴파일러는이멤버들을최소의기계워드로패킹함 unsigned 비트필드에는음수가아닌정수만이저장되고, int 비트필드는시스템에따라다름 - 보통 unsigned 비트필드를사용 A Book on C, 4ed. 9-26

비트필드예제 카드는 4개의무늬와각무늬당 13개의숫자로이루어짐 카드를비트필드로표현하면메모리를절약할수있음 struct pcard { }; unsigned pips : 4; unsigned suit : 2; struct pcard c; * c 는 6 비트에저장됨 A Book on C, 4ed. 9-27

비트필드예제 대부분의컴퓨터에서는비트필드가워드경계에걸치지않도록할당됨 예제 struct abc { } x; int a : 1, b : 16, c : 16; * 이경우 x 는두워드에다음과같이저장됨 - 첫번째워드 : 비트필드 a 와 b 저장 - 두번째워드 : c 저장 A Book on C, 4ed. 9-28

비트필드제약사항 비트필드의배열은허용되지않음 비트필드에주소연산자 & 를적용할수없음 - 즉, 멤버접근연산자 -> 를사용할수는있어도, 포인터가직접비트필드를포인트할수는없음 A Book on C, 4ed. 9-29

비트필드 패딩과정렬을위해이름없는비트필드나폭이 0 인비트필드를사용할수있음 struct small_integers { } unsigned i1 : 7, i2 : 7, i3 : 7, struct abc { }; : 11, /* align to next word */ i4 : 7, i5 : 7, i6 : 7; unsigned a : 1, : 0, b : 1, : 0, c : 1; A Book on C, 4ed. 9-30

비트와바이트의접근 비트와바이트를접근하기위해다음과같이선언할수있음 typedef struct { unsigned b0 : 8, b1 : 8, b2 : 8, b3 : 8; } word_bytes; typedef struct { unsigned b0 : 1, b1 : 1, b2 : 1, b3 : 1, b4 : 1, b5 : 1, b6 : 1, b7 : 1, b8 : 1, b9 : 1, b10 : 1, b11 : 1, b12 : 1, b13 : 1, b14 : 1, b15 : 1, b16 : 1, b17 : 1, b18 : 1, b19 : 1, b20 : 1, b21 : 1, b22 : 1, b23 : 1, b24 : 1, b25 : 1, b26 : 1, b27 : 1, b28 : 1, b29 : 1, b30 : 1, b31 : 1; } word_bits; typedef union { int i; word_bits bit; word_bytes byte; } word; A Book on C, 4ed. 9-31

비트와바이트의접근 int main(void) { word w = {0}; void bit_print(int); w.bit.b8 = 1; w.byte.b0 = 'a'; printf("w.i = %d\n", w.i); bit_print(w.i); return 0; } w.i = 353 00000000 00000000 00000001 01100001 w.i = 1635778560 01100001 10000000 00000000 00000000 A Book on C, 4ed. 9-32

접시보관방법 자료구조 ( 접시보관장, 접시개수대, 찬장 ) 연산 ( 접시넣기, 접시꺼내기 ) A Book on C, 4ed. 9-33

ADT ADT (Abstract Data Type: 추상자료형 ) - 연산자를포함한자료구조 - 구현에대해서는고려하지않음 A Book on C, 4ed. 9-34

스택 자료저장을위한자료구조로자료의삽입과삭제가톱이라는스택의한쪽끝에서일어남 삭제는후입선출방법으로일어남 스택연산 : push, pop, top, empty, full, reset ADT 스택 A Book on C, 4ed. 9-35

스택구현방법 - 배열 - 선형연결리스트 ADT 스택구현 A Book on C, 4ed. 9-36

ADT 스택구현예제 #define MAX_LEN 1000 #define EMPTY -1 #define FULL (MAX_LEN - 1) typedef enum boolean {false, true} boolean; typedef struct stack { char s[max_len]; int top; } stack; A Book on C, 4ed. 9-37

ADT 스택구현예제 void reset(stack *stk) { stk -> top = EMPTY; } void push(char c, stack *stk) { stk -> top++; stk -> s[stk -> top] = c; } char pop(stack *stk){ return (stk -> s[stk -> top--]); } A Book on C, 4ed. 9-38

ADT 스택구현예제 char top(const stack *stk){ return (stk -> s[stk -> top]); } boolean empty(const stack *stk) { return ((boolean) (stk -> top == EMPTY)); } boolean full(const stack *stk){ return ((boolean) (stk -> top == FULL)); } A Book on C, 4ed. 9-39