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

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

KNK_C_05_Pointers_Arrays_structures_summary_v02

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

기초컴퓨터프로그래밍

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Microsoft PowerPoint - Chapter_09.pptx

02장.배열과 클래스

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

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

14 주차구조체와공용체

PowerPoint 프레젠테이션

untitled

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

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

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap09-1.ppt

Microsoft PowerPoint - chap06-2pointer.ppt

; struct point p[10] = {{1, 2, {5, -3, {-3, 5, {-6, -2, {2, 2, {-3, -3, {-9, 2, {7, 8, {-6, 4, {8, -5; for (i = 0; i < 10; i++){ if (p[i].x > 0 && p[i

03장.스택.key

ABC 9장

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

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

PowerPoint 프레젠테이션

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

Microsoft PowerPoint - chap09.ppt

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


OCW_C언어 기초

C 프로그래밊 개요

Microsoft PowerPoint - ch07 - 포인터 pm0415

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

11장 포인터

untitled

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

untitled

11장 포인터

PowerPoint Presentation

슬라이드 1

슬라이드 1

11장 포인터

Microsoft PowerPoint - Chapter 6.ppt

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

C++ Programming

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

Microsoft PowerPoint - chap06-1Array.ppt

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

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

Microsoft PowerPoint - [2009] 02.pptx

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

K&R2 Reference Manual 번역본

10장. 구조체

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

중간고사

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

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

PowerPoint Template

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

Microsoft PowerPoint - Lesson12.pptx

Microsoft PowerPoint - C++ 5 .pptx

설계란 무엇인가?

Microsoft PowerPoint - chap-13.pptx

PowerPoint Template

PowerPoint Template

歯9장.PDF

Chapter #01 Subject

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

C# Programming Guide - Types

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

슬라이드 1

1. 클래스와배열 int 형배열선언및초기화 int ary[5] = 1, 2, 3, 4, 5 ; for (int i = 0; i < 5; i++) cout << "ary[" << i << "] = " << ary[i] << endl; 5 장클래스의활용 1

본 강의에 들어가기 전

PowerPoint Presentation

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

untitled

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

OCW_C언어 기초

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

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

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

Microsoft PowerPoint - chap12-고급기능.pptx

PowerPoint Presentation

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

PowerPoint 프레젠테이션

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

Microsoft PowerPoint - chap-11.pptx

Microsoft PowerPoint - Chapter_04.pptx

Slide 1

5.스택(강의자료).key

Microsoft PowerPoint - 제13장 구조체

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

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

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

Microsoft PowerPoint - ch07 - 포인터 pm0415

슬라이드 1

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

Microsoft PowerPoint - 제11장 포인터

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

제4장 기본 의미구조 (Basic Semantics)

chap10.PDF

Microsoft PowerPoint - 제3장-배열.pptx

Transcription:

(structures) 구조체정의 구조체선언및초기화 구조체배열 구조체포인터 구조체배열과포인터 구조체와함수 중첩된구조체 구조체동적할당 공용체 (union) 1

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을만들어사용할수있다. 예 1) 좌표평면상의좌표를프로그램에서다루고자한다. 좌표는 (x,y) 와같이두개의숫자를묶어서하나의데이터로처리해야한다. x y 예 2) 학생성적처리를위해서 학번, 이름, 성적 을묶어서하나의데이터로처리하고자한다. no name score 2

구조체정의 사용자정의자료형 (user-defined data types) 구조체 (structure) 공용체 (union) 구조체 Structure provides a means to aggregate variables of different types. point 는구조체명 ( 태그 ) struct point { int xcoord; // 멤버변수또는필드 int ycoord; } ; struct point a ; // a 는구조체변수명 int x ; // x 는정수형변수명 float y ; // y 는실수형변수명 char z ; // z 는문자형변수명 data type 3

구조체정의 구조체선언의다양한형태 Declaration of struct 1 struct point { int xcoord; int ycoord; struct point a, b; struct point c[100]; Declaration of struct 3 struct point { int xcoord; int ycoord; typedef struct point POINT; POINT a, b, c[100]; Declaration of struct 2 struct point { int xcoord; int ycoord; } a, b, c[100]; Declaration of struct 4 typedef struct { int xcoord; int ycoord; } POINT; POINT a, b, c[100]; 이경우에는 POINT 로만변수선언이가능하다. 4

구조체정의 구조체선언의다양한형태 typedef struct point { int xcoord; int ycoord; } POINT; POINT a, b, c[100]; 이경우에는 struct point 로도변수선언이가능하고 POINT 로도변수선언이가능하다. struct { int xcoord; int ycoord; } a, b, c[100]; 이경우에는 xcoord 와 ycoord 두개의멤버변수를갖는구조체변수 a, b 와구조체배열 c 를선언한다. 하지만구조체이름 ( 태그 ) 가없기때문에이후로는이구조체변수는선언할수없다. 5

구조체정의 #include <stdio.h> struct point { int xcoord; int ycoord; int main() { struct point a, b; struct point c[100]; 구조체선언을 main 위에하면프로그램전체에서 struct point 자료형을사용할수있다. main 함수안에서선언하면 main 함수에서만사용할수있다.... } 6

구조체선언및초기화 구조체멤버접근기호 :., -> typedef struct { int xcoord; int ycoord; } POINT; int main() { POINT a, b, c; a.xcoord = 10; a.ycoord = 20; b.xcoord = 4; b.ycoord = 5; POINT a={10,20 POINT b={4,5 POINT c; POINT a={10,20}, b={4,5}, c; c.xcoord = a.xcoord + b.xcoord; c.ycoord = a.ycoord + b.ycoord; printf("%d %d \n", c.xcoord, c.ycoord); } return 0; 7

구조체선언및초기화 struct point { int x; int y; typedef struct point POINT ; POINT a = {2,3}, b={1,5}, c; // 구조체초기화 c = a + b; 불가능 (why?) printf( c : %d \n,. ) 구조체를통째로출력불가능 c = a; 구조체를대입하는것은가능 8

구조체선언및초기화 typedef struct { int no; char name[20]; int score; } student ; student s1 = { 20141234, Lee, 90 student s2; s2.no = 20140001; s2.name = Kim ; // error!! name 은배열임. strcpy(s2.name, Kim ); s2.score = 80; 9

구조체배열 struct point { int x; int y; typedef struct point POINT ; POINT pt[5] = {{1,2}, {3,5}, {7,8}, {10, 11}, {6,9} 정수배열 int A[5] = { 1,3,5,7,9 0 1 2 3 4 1 2 3 5 7 8 10 11 6 9 pt[0] pt[1] pt[2] pt[3] pt[4] pt[0].x pt[0].y pt[1].x pt[1].y pt[2].x pt[2].y pt[3].x pt[3].y pt[4].x pt[4].y 10

구조체포인터 struct point { int x; int y; typedef struct point POINT ; POINT p1={1,2}, p2={5,6 POINT* pt; p1 1 2 p2 5 6 pt = &p1; pt *pt.x 로하면안되는지? p1.x = 7; p1.y = 9; pt -> x = 7; pt -> y = 9; (*pt).x = 7; (*pt).y = 9; 모두같은표현. ( 구조체 p1 의값을 7,9 로바꾸고자함 ) 포인터로구조체의필드에접근할때는 -> 이용함. 11

operators associativity ( ) [ ] ->. ++(postfix) -- (postfix) ++ (prefix) -- (prefix)! ~ sizeof(type) + (unary) - (unary) & (address) * (indirection) * / % + - << >> < <= > >= ==!= & ^ &&?: = += -= *= /= %= >>= <<= &= ^= =, (comma operator) 12

구조체배열과포인터 struct point { int x; int y; typedef struct point POINT ; POINT pa[3] = {{3,5}, {7,8}, {2,9} POINT* pt; pt = pa; pa 0 1 2 3 5 7 8 2 9 pt->x (*pt).x pt[0].x pa[0].x (*pa).x pt (*(pt+1)).x (pt+1)->x pa[1].x pt[1].x 13

구조체와함수 구조체변수는함수의인자가될수있다. (call-by-value) typedef struct { int stuid; char name[10]; int score; } student; void changescore( student ); int main() { student st; st.stuid = 20141234; strcpy(st.name, "Lee"); st.score = 90; changescore( st ); printf("%d %s %d \n", st.stuid, st.name, st.score); } return 0; void changescore( student s ) { s.score += 5; } 14

구조체와함수 구조체변수는함수의인자가될수있다. (call-by-reference) typedef struct { int stuid; char name[10]; int score; } student; void changescore2( student * p ); int main() { student st; st.stuid = 20121234; strcpy(st.name, "Lee"); st.score = 90; changescore2 ( &st ); printf("%d %s %d \n", st.stuid, st.name, st.score); return 0; } void changescore2( student * p ) { p->score += 5; } 15

구조체와함수 구조체는함수의반환값이될수있다. typedef struct { int stuid; char name[10]; int score; } student; student changescore3( ); int main() { student s1, s2, s3; s1.stuid = 20141234; strcpy(s1.name, "Lee"); s1.score = 90; s2 = s1; s3 = changescore3( ); return 0; } student changescore3( ) { student stu; stu.stuid = 20143333; strcpy(stu.name, Kim ); stu.score = 93; return stu; } 16

중첩된구조체 (nested structure) typedef struct { int korean; int math; int eng; } SCORE; typedef struct { int no; char name[20]; SCORE score; char phone[15]; } STUDENT; int main() { STUDENT s1 = {20141111, "Kim", {90, 80, 70}, "010-111-1111" STUDENT s2; SCORE s = {85, 90, 95 s2.no = 20142222; strcpy(s2.name, "Lee"); s2.score = {85,90, 95 // error!! s2.score = s; ok!! s2.score.korean = 85; s2.score.math = 90; s2.score.eng = 95; ok!! } strcpy(s2.phone, "010-222-2222"); 17

구조체동적할당 struct point { int x; int y; typedef struct point POINT ; POINT *s, *t; s = (POINT*) malloc(sizeof(point)); s->x = 10; s->y = 20; s 10 20 t t = (POINT*) malloc(sizeof(point) * 5); t[3].x = 5; t[3].y = 6; 5 6 heap 18

공용체 (union) 공용체는구조체와같은구문형식을갖지만각멤버들은같은기억 장소를공유한다. mydata 는공용체명 ( 태그 ) data type union mydata { int float f; char c; i; // 공용체멤버변수또는필드 union mydata m; m.i = 100; m.f = 55.7f; m.c = A ; m 은멤버변수중에서가장큰공간을요구하는변수의공간만큼할당된다. m m 100 55.7f 100 위에덮어쓴다. m A 55.7f 위에덮어쓴다. 19

공용체 (union) union mydata { int i; float f; char c; typedef union mydata data; typedef union mydata { int i; float f; char c; } data; data dt; dt.i = 100; dt.f = 55.7f; dt.c = A ; 20

공용체 (union) union info { int career; // 직원의경우근속연수를저장한다. float score; // 학생이면성적을저장한다. struct person { int id ; // 고유아이디 char name[20]; // 이름 union info Info; // 학생이면성적, 직원이면근속연수 char phone[20]; // 전화번호 struct person student, officer; student.id = 20141111; strcpy(student.name, Hong Gil Dong ); student.info.score = 92.5f; strcpy(student.phone, 010-111-1111 ); officer.id = 10020; strcpy(officer.name, Lee Chul Soo ); officer.info.career = 5; strcpy(officer.phone, 010-222-2222 ); 21