Microsoft PowerPoint - 05-chap03-ArrayAndPointer.ppt

Similar documents
슬라이드 1

슬라이드 1

슬라이드 1

슬라이드 1

CHAP 3:배열, 구조체, 포인터

02장.배열과 클래스

11장 포인터

Microsoft PowerPoint - ch07 - 포인터 pm0415

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

11장 포인터

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

PowerPoint 프레젠테이션

슬라이드 1

untitled

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

Chapter 4. LISTS

Microsoft PowerPoint - 제11장 포인터

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

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

Microsoft PowerPoint - chap-11.pptx

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

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

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

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

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

Microsoft PowerPoint - chap06-2pointer.ppt

PowerPoint 프레젠테이션

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

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

Microsoft PowerPoint - Chapter_08.pptx

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

KNK_C_05_Pointers_Arrays_structures_summary_v02

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

Microsoft PowerPoint - 제3장-배열.pptx

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

chap 5: Trees

Microsoft PowerPoint - Chapter14_17.pptx

Microsoft PowerPoint - Lesson14.pptx

Microsoft PowerPoint - Lesson14.pptx

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

PowerPoint Presentation

4장. 순차자료구조

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

Microsoft PowerPoint - 06-List.ppt

슬라이드 1

설계란 무엇인가?

PowerPoint Template

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


중간고사 (자료 구조)

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

4장

설계란 무엇인가?

Data Structure

Microsoft PowerPoint - 08-chap06-Queue.ppt

Microsoft PowerPoint - 08-Queue.ppt

슬라이드 1

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

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

ch15

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

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

슬라이드 1

Microsoft PowerPoint - Chapter_04.pptx

PowerPoint Template

OCW_C언어 기초

슬라이드 1

<4D F736F F F696E74202D20C1A63134C0E520C6F7C0CEC5CD5FC8B0BFEB>

슬라이드 1

슬라이드 1

슬라이드 1

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

C 프로그래밊 개요

06장.리스트

Microsoft PowerPoint - ch07 - 포인터 pm0415

슬라이드 1

03_queue

01장.자료구조와 알고리즘

원형연결리스트에대한설명중틀린것은 모든노드들이연결되어있다 마지막에삽입하기가간단한다 헤더노드를가질수있다 최종노드포인터가 NULL이다 리스트의 번째요소를가장빠르게찾을수있는구현방법은무엇인가 배열 단순연결리스트 원형연결리스트 이중연결리스트 단순연결리스트의노드포인터 가마지막노드를

4. 1 포인터와 1 차원배열 4. 2 포인터와 2 차원배열 4. 3 포인터배열 4. 4 포인터와문자그리고포인터와문자열

슬라이드 1

슬라이드 1

Microsoft PowerPoint - 제6장-연결리스트.pptx

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

Microsoft PowerPoint - [2009] 02.pptx

Frama-C/JESSIS 사용법 소개

JAVA PROGRAMMING 실습 08.다형성

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

슬라이드 1

Chap 6: Graphs

Microsoft PowerPoint - chap-05.pptx

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

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

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

K&R2 Reference Manual 번역본

6.1 Addresses and Pointers Recall memory concepts from Ch2 ch6_testbasicpointer.c int x1=1, x2=7; double distance; int *p; int q=8; p = &q; name addre

PowerPoint 프레젠테이션

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

리스트 (list), 선형리스트 (linear list): 순서를가진항목들의모임 집합 : 항목간의순서의개념이없음 L = n ( item0, item1,..., item -1) l 리스트의예 l 요일 : ( 일요일, 월요일,, 토요일 ) l 한글자음의모임 : ( ㄱ, ㄴ

Chapter 4. LISTS

Transcription:

배열이란? Chapter. 배열구조체포인터 같은형의변수를여러개만드는경우에사용 int A, A, A, A,, A; int A[]; 4 5 6 반복코드등에서배열을사용하면효율적인프로그래밍이가능 예 ) 최대값을구하는프로그램 : 만약배열이없었다면? tmp=score[]; for(i=;i<n;i++) if( score[i] > tmp ) tmp = score[i]; Today... 배열개념및특성에대한이해 구조체의개념, 필요성등에대한이해 포인터의개념, 정의, 필요성등에대한이해 배열 ADT (Abstract Data Type) 배열 : < 인덱스, 요소 > 쌍의집합 인덱스가주어지면해당되는요소가대응되는구조 배열 ADT 객체 : < 인덱스, 요소 > 쌍의집합연산 : create(n) ::= n 개의요소를가진배열의생성. retrieve(a, i) ::= 배열 A 의 i 번째요소반환. store(a, i, item) ::= 배열 A 의 i 번째위치에 item 저장. 4 /

/ 차원배열 다항식 int A[6]; A[] A[] A[] A[] A[4] A[5] 다항식의일반적인형태 p( x) = a a n n n x + an x +... + ax + 프로그램에서다항식을처리하려면다항식을위한자료구조가필요 -> 어떤자료구조를사용해야다항식의덧셈, 뺄셈, 곱셈, 나눗셈연산을할때편리하고효율적일까? base base+5*sizeof(int) base+4*sizeof(int) base+*sizeof(int) base+*sizeof(int) base+sizeof(int) 배열을사용한 가지방법 ) 다항식의모든항을배열에저장 ) 다항식의 이아닌항만을배열에저장 5 차원배열 다항식표현방법 # int A[][4]; 모든차수에대한계수값을배열로저장 하나의다항식을하나의배열로표현 A[][] A[][] A[][] A[][] A[][] A[][] A[][] A[][] A[][] A[][] A[][] A[][] A[][] A[][] A[][] A[][] A[][] 5 4 x + x + x + x + 6x + x coef 4 5 6 6 A[][] typedef struct int degree; float coef[max_degree]; polynomial; polynomial a = 5,,,,, 6, ; 실제메모리안에서의위치 6

/ 다항식표현방법 #( 계속 ) 다항식표현방법 #( 계속 ) 장점 : 다항식의각종연산이간단해짐 단점 : 대부분의항의계수가 이면공간의낭비가심함. 예 ) 다항식의덧셈연산 장점 : 메모리공간의효율적인이용 단점 : 다항식의연산들이복잡해진다 ( 프로그램. 참조 ). ( 예 ) 다항식의덧셈 A=x+x+, B=x+x+, C=A+B while( Apos<=A.degree && Bpos<=B.degree ) if( degree_a > degree_b ) // A항 > B항 C.coef[Cpos++]= A.coef[Apos++]; degree_a--; else if( degree_a == degree_b ) // A항 == B항 C.coef[Cpos++]=A.coef[Apos++]+B.coef[Bpos++]; degree_a--; degree_b--; else // B항 > A항 C.coef[Cpos++]= B.coef[Bpos++]; degree_b--; coef expon A B avail 4 5 6 4 5 6 coef expon A B C avail 다항식표현방법 # 희소행렬 다항식에서 이아닌항만을배열에저장 ( 계수, 차수 ) 형식으로배열에저장 ( 예 ) x5+6x+ -> ((,5), (6,), (,)) 배열을이용하여행렬 (matrix) 를표현하는 가지방법 () 차원배열을이용하여배열의전체요소를저장하는방법 () 이아닌요소들만저장하는방법 struct float coef; int expon; terms[max_terms]=,5, 6,,, ; 하나의배열로여러개의다항식을나타낼수있음. A B avail 4 5 6 A = 5 B = 6 5 coef expon terms

4 / 희소행렬표현방법 # 구조체 차원배열을이용하여배열의전체요소를저장하는방법 장점 : 행렬의연산들을간단하게구현할수있다. 단점 : 대부분의항들이 인희소행렬의경우많은메모리공간낭비 구조체 (structure): 타입이다른데이터를하나로묶는방법 배열 (array): 타입이같은데이터들을하나로묶는방법 4 5 A = B = A= B= 6 5 5 6 5 5 4 5 배열 구조체 char carray[]; struct example char cfield; int ifield; float ffield; double dfield; ; struct example s; 필드 5 희소행렬표현방법 # 구조체의사용예 이아닌요소들만저장하는방법 A = 장점 : 희소행렬의경우, 메모리공간의절약 단점 : 각종행렬연산들의구현이복잡해진다. 5 B = 6 5 행열값 A= B= 4 5 6 5 행열값 5 6 4 5 5 4 5 6 5 구조체의선언과구조체변수의생성 struct person char name[]; int age; float height; ; struct person a; // 문자배열로된이름 // 나이를나타내는정수값 // 키를나타내는실수값 // 구조체변수선언 typedef 을이용한구조체의선언과구조체변수의생성 typedef struct person char name[]; int age; float height; person; person a; // 문자배열로된이름 // 나이를나타내는정수값 // 키를나타내는실수값 // 구조체변수선언 4 6

5 / 구조체의대입과비교연산 포인터 (pointer) 구조체변수의대입 : 가능 struct person char name[]; int age; float height; ; person a, b; b = a; // 문자배열로된이름 // 나이를나타내는정수값 // 키를나타내는실수값 // 가능 구조체변수끼리의비교 : 불가능 if( a > b ) printf("a 가 b 보다나이가많음 "); // 불가능 포인터 : 다른변수의주소를가지고있는변수 char a='a'; char *p; p = &a; 포인터가가리키는내용의변경 : * 연산자사용 *p= 'B'; A 포인터 p B 포인터 p 주소 변수 a 주소 변수 a 자체참조구조체 포인터와관련된연산자 자체참조구조체 (self-referential structure) 필드중에자기자신을가리키는포인터가한개이상존재하는구조체 연결리스트나트리에많이등장 typedef struct ListNode char data[]; struct ListNode *link; ListNode; & 연산자 변수의주소를추출주소 * 연산자 *p 포인터가가리키는곳의내용을추출 포인터 p A 변수 a p // 포인터 *p // 포인터가가리키는값 *p++ // 포인터가가리키는값을가져온다음, 포인터를한칸증가한다. *p-- // 포인터가가리키는값을가져온다음, 포인터를한칸감소한다. (*p)++ // 포인터가가리키는값을증가시킨다. &a int a; int *p; int **pp; p = &a; pp = &p; // 정수변수선언 // 정수포인터선언 // 정수포인터의포인터선언 // 변수 a와포인터p를연결 // 포인터 p와포인터의포인터 pp를연결

6 / 디양한포인터 배열과포인터 포인터의종류 배열의이름 : 사실상의포인터와같은역할 void *p; // p 는아무것도가리키지않는포인터 int *pi; // pi 는정수변수를가리키는포인터 float *pf; // pf 는실수변수를가리키는포인터 char *pc; // pc 는문자변수를가리키는포인터 int **pp; // pp 는포인터를가리키는포인터 struct test *ps; // ps 는 test 타입의구조체를가리키는포인터 void (*f)(int) ; // f 는함수를가리키는포인터 4 A[] A[] A[] A[] A[4] A[5] 포인터의형변환 : 필요할때마다형변환하는것이가능하다. void *p; pi=(int *) p; A 컴파일러가배열의이름을배열의첫번째주소로대치 함수의파라미터로서의포인터 구조체의포인터 함수안에서파라미터로전달된포인터를이용하여외부변수의값변경가능 구조체의요소에접근하는연산자 : void swap(int *px, int *py) int tmp; tmp = *px; *px = *py; *py = tmp; int a=,b=; printf("swap 을호출하기전 : a=%d, b=%d\n", a,b); swap(&a, &b); printf("swap 을호출한다음 : a=%d, b=%d\n", a,b); struct int i; float f; s, *ps; ps = &s; ps i = ; ps f =.4; ps.4 s s.i = ps i s.f = ps f 4

/ 포인터의포인터 포인터사용시주의할점 56 포인터가아무것도가리키고있지않을때는 NULL 로설정 int *pi=null; 초기화가안된상태에서사용금지 56 포인터의포인터 pp 포인터 p A 변수 a char *pc; // 포인터 pi 는초기화가안되어있음 *pc = 'E ; // 위험한코드 int a; // 정수변수변수선언 int *p; // 정수포인터선언 int **pp; // 정수포인터의포인터선언 p = &a; // 변수 a와포인터p를연결 pp = &p; // 포인터 p와포인터의포인터 pp를연결 포인터타입간의변환시에는명시적인타입변환사용 int *pi; float *pf; pf = (float *)pi; 5 포인터연산 동적메모리할당 포인터에대한사칙연산 포인터가가리키는객체단위로계산된다. 프로그램이실행도중에메모리를할당받는것 p // 포인터 p+ // 포인터 p가가리키는객체의바로뒤객체 p- // 포인터 p가가리키는객체의바로앞객체 4 int *pi; pi = (int *)malloc(sizeof(int));... // 동적기억장소사용... free(pi); // 동적메모리할당 A[] A[] A[] A[] A[4] A[5] 동적메모리할당관련라이브러리함수 p- p p+ malloc(size) // 메모리할당 free(ptr) // 메모리할당해제 sizeof(var) // 변수의크기반환 ( 바이트단위 )

동적메모리할당라이브러리 요약 malloc(int size) size 바이트만큼의메모리블록을할당 (char *)malloc() ; /* 바이트로 5 개의정수를저장 */ (int *)malloc(sizeof(int));/* 정수 개를저장할메모리확보 */ (struct Book *)malloc(sizeof(struct Book))/* 하나의구조체생성 */ 배열의개념및활용방법 구조체의개념, 정의, 활용방법 포인터의목적, 장단점 free(void ptr) ptr 이가리키는할당된메모리블록을해제 sizeof 키워드 변수나타입의크기반환 ( 바이트단위 ) size_t i = sizeof( int ); // 4 struct AlignDepends char c; int i; ; size_t size = sizeof(struct AlignDepends); // int array[] =,,, 4, 5 ; size_t sizearr = sizeof( array ) / sizeof( array[] ); // /4=5 동적메모리할당예제 struct Example int number; char name[]; ; void struct Example *p; p=(struct Example *)malloc(*sizeof(struct Example)); if(p==null) fprintf(stderr, "can't allocate memory\n") ; exit() ; p->number=; strcpy(p->name,"park"); (p+)->number=; strcpy((p+)->name,"kim"); free(p); Dongwon Jeong djeong@kunsan.ac.kr http://ist.kunsan.ac.kr/ Lab. of Information Sciences & Technology, Department of Informatics & Statistics, Kunsan National Unversity, Gunsan, Korea /