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

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

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

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

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

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

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

기초컴퓨터프로그래밍

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

Microsoft PowerPoint - chap06-2pointer.ppt

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

KNK_C_05_Pointers_Arrays_structures_summary_v02

Microsoft PowerPoint - chap12-고급기능.pptx

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

슬라이드 1

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

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

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

14 주차구조체와공용체

untitled

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

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

02장.배열과 클래스

Microsoft PowerPoint - chap09-1.ppt

Microsoft PowerPoint - Chapter_09.pptx

Microsoft PowerPoint - chap06-1Array.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

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

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

Microsoft PowerPoint - ch07 - 포인터 pm0415

11장 포인터

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

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

PowerPoint Template

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

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

슬라이드 1

PowerPoint Template

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

PowerPoint 프레젠테이션

PowerPoint Presentation

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap-11.pptx

C++ Programming

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

PowerPoint 프레젠테이션

본 강의에 들어가기 전

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

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

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

11장 포인터

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

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

01_List

설계란 무엇인가?

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

K&R2 Reference Manual 번역본

설계란 무엇인가?

PowerPoint 프레젠테이션

11장 포인터

중간고사

Microsoft PowerPoint - Chapter8.pptx

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

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

PowerPoint 프레젠테이션

Data Structure

C++ Programming

BMP 파일 처리

Microsoft PowerPoint - 제11장 포인터

C 프로그래밊 개요

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

chap8.PDF

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

슬라이드 1

10장. 구조체

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

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

슬라이드 1

Microsoft PowerPoint - Chapter_08.pptx

Microsoft PowerPoint - [2009] 02.pptx

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

PowerPoint 프레젠테이션

Microsoft PowerPoint - Lesson12.pptx

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

Chapter 4. LISTS

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

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

Microsoft PowerPoint - gnu-w10-c-chap12

PowerPoint Presentation

Microsoft PowerPoint - 08-C-App-19-Quick-Preprocessor

Data Structure

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

Microsoft PowerPoint - chap09.ppt

ABC 9장

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

untitled

C++ Programming

설계란 무엇인가?

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

Microsoft PowerPoint - chap-03.pptx

쉽게 풀어쓴 C 프로그래밍

Transcription:

C 프로그래밍프로젝트 Chap 22. 구조체와사용자정의자료형 1 2013.10.10. 오병우 컴퓨터공학과

구조체의정의 (Structure) 구조체 하나이상의기본자료형을기반으로사용자정의자료형 (User Defined Data Type) 을만들수있는문법요소 배열 vs. 구조체 배열 : 한가지자료형의집합 구조체 : 여러가지자료형의집합 사용자정의자료형 struct point { int x; int y; }; // point 라는이름의구조체선언 // 구조체멤버 int x // 구조체멤버 int y Department of Computer Engineering 2

구조체의정의 int int xpos; xpos; int int ypos; // // 마우스의마우스의 x 좌표 x 좌표 // // 마우스의 y 좌표 y 좌표 마우스의좌표정보를저장하고관리하기위해서는 x 좌표와 y 좌표를저장할수있는두개의변수가필요하다. xpos 와 ypos 는서로독립된정보를표현하지않고하나의정보를표현한다. 따라서이둘은늘함께한다. struct point // point라는이름의구조체정의 { int xpos; // point 구조체를구성하는멤버 xpos int ypos; // point 구조체를구성하는멤버 ypos }; 구조체를이용해서 xpos 와 ypos 를하나로묶었다. 이둘을묶어서 point 라는이름의새로운자료형을정의! int 가자료형의이름인것처럼 point 도자료형의이름이다. 단, 프로그래머가정의한자료형이기에 사용자정의자료형 (user defined data type) 이라한다. struct person { char name[20]; // 이름저장 char phonenum[20]; // 전화번호저장 int age; // 나이저장 }; 개인의이름과전화번호나이정보를 person 이라는구조체정의를통해서묶고있다. 배열도구조체의멤버로선언이가능! Department of Computer Engineering 3

구조체변수의선언과접근 포인터는 -> 사용 구조체변수선언의기본형태 struct type_name val_name ; 멤버의접근방식 마침표 (.) 사용 구조체변수의이름. 구조체멤버의이름 struct point pos; struct person man; 구조체변수선언의예 pos.xpos=20; 구조체변수 pos의멤버 xpos에 20을저장 printf("%s \n", man.name); man의멤버 name에저장된문자열출력 구조체변수선언의결과 Department of Computer Engineering 4

구조체변수의선언과접근관련예제 1 #include <stdio.h> #include <math.h> struct point { int x; int y; }; Main.c int main (void) { struct point p1, p2; double distance; printf(" 첫번째점의 x, y 좌표입력 : "); scanf("%d %d", &p1.x, &p1.y); } printf(" 두번째점의 x, y 좌표입력 : "); scanf("%d %d", &p2.x, &p2.y); distance = sqrt ((p1.x-p2.x)*(p1.x-p2.x) + (p1.y-p2.y)*(p1.y-p2.y)); printf(" 두점의거리는 %5.1lf 입니다.\n", distance); return 0; 이예제에서호출하는함수 sqrt 는제곱근을반환하는함수로서헤더파일 math.h 에선언된수학관련함수이다. Department of Computer Engineering 5

Point 예제의모듈화 // Point.h : Header File of the Point Module /////////////////////////////////////////// #ifndef _POINT_H_ #define _POINT_H_ Point.h // Main.c : Main Implementation File /////////////////////////////////////////// //#include "stdafx.h // Precompiled Header 사용시 struct point { int x; int y; }; extern double pointgetdistance( struct point p1, struct point p2); #endif// _POINT_H_ #include <stdio.h> #include Point.h int main (void) { struct point p1, p2; double distance; Main.c // Point.c : Implementatin of the Point Module /////////////////////////////////////////// //#include "stdafx.h // Precompiled Header 사용시 #include <math.h> Point.c #include Point.h double pointgetdistance(struct point p1, struct point p2) { return sqrt ((p1.x-p2.x)*(p1.x-p2.x) + (p1.y-p2.y)*(p1.y-p2.y)); } } printf(" 첫번째점의 x, y 좌표입력 : ); scanf("%d %d", &p1.x, &p1.y); printf(" 두번째점의 x, y 좌표입력 : ); scanf("%d %d", &p2.x, &p2.y); printf(" 두점의거리는 %5.1lf 입니다.\n", pointgetdistance(p1, p2)); return 0; Department of Computer Engineering 6

구조체변수의선언과접근관련예제 2 구조체의멤버라하더라도일반적인접근의방식을그대로따른다. 구조체의멤버로배열이선언되면배열의접근방식을취하면되고, 구조체의멤버로포인터변수가선언되면포인터변수의접근방식을취하면된다. 실행결과 Department of Computer Engineering 7

구조체정의와동시에변수선언하기 point 라는이름의구조체를정의함과동시에 point 구조체의변수 pos1, pos2, pos3 를선언하는문장이다. 위와동일한결과를보이는구조체의정의와변수의선언이다. 구조체를정의함과동시에변수를선언하는문장은잘사용되지않는다. 그러나문법적으로지원이되고또간혹사용하는경우도있다. Department of Computer Engineering 8

구조체변수의초기화 초기화방식이배열과유사하다. 초기화할데이터들을중괄호안에순서대로나열하면된다.. 실행결과 Department of Computer Engineering 9

구조체배열의선언과접근 struct point arr[4]; 길이가 4 인구조체배열의선언방법 선언된배열의형태 실행결과 Department of Computer Engineering 10

구조체배열의초기화 struct person man={" 이승기 ", "010-1212-0001", 21}; 구조체변수의초기화 구조체변수하나를초기화하기위해서하나의중괄호를사용하듯이... struct person arr[3]={ {" 이승기 ", "010-1212-0001", 21}, // 첫번째요소의초기화 {" 정지영 ", "010-1313-0002", 22}, // 두번째요소의초기화 {" 한지수 ", "010-1717-0003", 19} // 세번째요소의초기화 }; 구조체배열의초기화 구조체배열을초기화하기위해서배열요소각각의초기화값을중괄호로 묶어서표현한다. Department of Computer Engineering 11

구조체배열의초기화예제 실행결과 Department of Computer Engineering 12

구조체변수와포인터 구조체 point 의포인터변수선언 pptr 이가리키는구조체변수의멤버 xpos 에접근 pptr 이가리키는구조체변수의멤버 ypos 에접근 구조체포인터변수를대상으로하는 포인터연산및멤버의접근방법 포인터는 -> 사용 -> 연산자를기반으로하는구조체변수 의멤버접근방법 Department of Computer Engineering 13

구조체변수와포인터관련예제 프로그래머들이주로사용하는연산자이니 -> 연산자의사용에익숙해지자. 실행결과 Department of Computer Engineering 14

포인터변수를구조체의멤버로선언하기 1 구조체변수의멤버로구조체포인터변수가선언될수있다! 실행결과 Department of Computer Engineering 15

포인터변수를구조체의멤버로선언하기 2 type 형구조체변수의멤버로 type 형포인터변수를둘수있다. 실행결과 Department of Computer Engineering 16

자기참조형구조체 Linked List struct person { char name[20]; char pid[20]; struct person* frnd; }; 자기참조형구조체 메모리동적할당 int main() { struct person man1={"mr. Lee", "820204-0000512"}; struct person man2={"mr. Lee's Friend", "820000-0000101"}; } man2.frnd = NULL; man1.frnd=&man2; printf("[mr. Lee]\n"); printf("name : %s\n", man1.name); printf("pid : %s\n", man1.pid); printf("[his Friend]\n"); printf("name : %s\n", man1.frnd->name); printf("pid : %s\n", man1.frnd->pid); return 0; man1 man2 name: Mr. Lee name: Friend pid: 820204- pid: 820000- frnd: frnd: NULL Department of Computer Engineering 17

구조체변수와첫번째멤버의주소값 구조체변수의주소값과구조체변수의첫번째멤버의주소값은일치한다. 응용프로그램분야에서는이사실을이용해서프로그램을작성하기도한다. 실행결과 Department of Computer Engineering 18