Chapter 10 Pointer Applications.

Slides:



Advertisements
Similar presentations
Chapter 12. 배열. 배열  동일한 항목들이 동일한 크기로 연속적으로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조.
Advertisements

1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
C 언어 (STS ) 10. Pointer Applications.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
제 9 장 포인터.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
제14장 동적 메모리.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
제 9 장 구조체와 공용체.
컴퓨터 프로그래밍 기초 [Final] 기말고사
-Part2- 제3장 포인터란 무엇인가.
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
자료 구조: Chapter 3 (2)구조체, 포인터
개정판 누구나 즐기는 C언어 콘서트 제9장 포인터 출처: pixabay.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
10장 메모리 관리.
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express.
25장. 메모리 관리와 동적 할당.
동적메모리와 연결리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
5장. 참조 타입.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
제 3장. C보다 나은 C++ II.
C 프로그래밍.
Dynamic Memory and Linked List
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
2주차: 변수, 수식, Control Flow.
14장. 포인터와 함수에 대한 이해.
11장. 1차원 배열.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
처음으로 배우는 C 프로그래밍 제4부 복합 데이터 형 제 8 장 배열, 주소, 포인터.
C#.
박성진 컴퓨터 프로그래밍 기초 [09] 배열 part 1 박성진
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
컴퓨터 개론 및 실습 11. 동적 메모리 할당.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
메모리 관리 & 동적 할당.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
* 프로그램을 간단히 하기 위해 malloc 성공체크는 안 함
19. 함수 포인터와 void 포인터.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
포인터 1차원 배열과 포인터 2차원 배열과 포인터 문자열 배열과 포인터 포인터 배열
인터넷응용프로그래밍 JavaScript(Intro).
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
처음으로 배우는 C 프로그래밍 제4부 복합 데이터 형 제 7 장 배열.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
8주차: Strings, Arrays and Pointers
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
제 6 장 함수(functions).
데이터 동적 할당 Collection class.
메모리 관리 및 저수준 자료구조 Managing Memory and low-level data structures
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
구조체(struct)와 공용체(union)
Summary of Pointers and Arrays
Numerical Analysis Programming using NRs
Chapter 11 구조체.
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
어서와 C언어는 처음이지 제21장.
Chapter 8 Arrays.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
13. 포인터와 배열! 함께 이해하기.
Pointers summary.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

Chapter 10 Pointer Applications

배열과 동적 메모리 할당 배열: 배열이름이 포인터 상수임 동적 메모리 할당: 필요한 메모리를 할당받고, 다 쓴 메모리는 반납함.

배열이름은 포인터 상수 배열 이름은 포인터 상수이다. 따라서 값이 바뀔 수 없다. 배열의 첫 번째 요소를 가리킨다. 다차원 배열에 대해서도 이미 설명함 배열 이름 자체가 간접참조에 사용될 수 있다. a  &a[0] 포인터가 배열의 어떤 요소를 가리킨다면 배열이름 대신에 사용할 수 있다.

Figure 10-1

Figure 10-2

Figure 10-3

Figure 10-4

포인터 계산과 배열 포인터 계산을 이용하여 배열에 접근할 수 있다. 포인터 p가 있을 때, p+n은 p를 기준으로 n 요소 떨어진 값을 가리키는 포인터 다음 페이지 그림 참조 주소 = 포인터 + (오프셋*요소의 크기) a+n  a+n*(sizeof(one element)) 포인터 연산과 값 접근 *(a+n)  a[n]  p=a+n; *p p+5, 5+p, p1-p2, p++, --p

Figure 10-5

Figure 10-6

Figure 10-7

Figure 10-8

포인터를 이용한 배열 출력 int main (void) { int ary[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int *pWalk; int *pEnd; /* Statements */ /* Print array forward */ printf("Array forward : "); for (pWalk = ary, pEnd = ary + MAX_SIZE; pWalk < pEnd; pWalk++) printf ("%3d", *pWalk); printf ("\n"); /* Print array backward */ printf("Array backward: "); for (pWalk = pEnd - 1; pWalk >= ary; pWalk--) return 0; } /* main */

포인터를 이용한 binary search int binarySearch (int list[], int *endPtr, int target, int **locnPtr) { /* Local Definitions */ int *firstPtr; int *midPtr; int *lastPtr; /* Statements */ firstPtr = list; lastPtr = endPtr; while (firstPtr <= lastPtr) midPtr = firstPtr + (lastPtr - firstPtr) / 2; if (target > *midPtr) /* look in upper half */ firstPtr = midPtr + 1; else if (target < *midPtr) /* look in lower half */ lastPtr = midPtr - 1; else /* found equal: force exit */ firstPtr = lastPtr + 1; } /* end while */ *locnPtr = midPtr; return (target == *midPtr); } /* binarySearch */

다차원 배열에서 포인터 연산 2차원 배열 int table[5][10] table[5]  table + 5

Figure 10-9

함수로 배열 전달 배열 이름을 그냥 넘겨주면 됨 받을 때는 배열이나 포인터로 받으면 됨 다차원 doIt(anyName) 받을 때는 배열이나 포인터로 받으면 됨 int doIt(int ary[]) int doIt(int *arySalary) 다차원 float doIt(int bigAry[][12][5] 다차원을 일차원으로 또는 그 역으로도 가능 float doIt(int bigAry[240])  float doIt(int *bigAry) float doIt(int anySalary[5][6])

Figure 10-10

기타 선언 다음의 오른쪽 왼쪽 규칙을 볼 것 int * aryOfptrs[5] int (*ptrToAry) [5]

Figure 10-11

Figure 10-2

메모리 할당 함수 필요한 메모리의 양이 가변적이거나 프로그램 중간에 필요 없는 메모리를 반납하여 다른 목적에서 쓸 수 있게 함 정적 메모리 할당 동적 메모리 할당 메모리 할당 방법에 따라 성능에 큰 차이가 나므로 조심해야 함 메모리 할당 함수 malloc, calloc, realloc, free

메모리 사용 메모리 사용 프로그램을 기억하는 메모리 스택(stack): 함수가 불릴 때마다 지역변수의 기억장소를 할당(auto[matic]) 전역변수, static 변수 등 기억: 주로 heap사용 힙(heap): 메모리할당 함수에 의해 사용

Figure 10-13

Figure 10-14

Figure 10-15

malloc malloc void *malloc(size_t size); size_t는 <stdio.h>에 있으며 주로 unsigned int형임 pInt = (int *) malloc (sizeof(int)); 크기는 이식성이 높도록 되도록 ‘sizeof’로 계산할 것 형변환을 요구하지 않지만 형변환을 하는 것이 좋음 malloc에 의해 할당된 메모리는 포인터로만 접근 가능 (자체 식별자가 없음) 메모리가 충분하지 않으면 NULL을 돌려줌

Figure 10-16

인접할당(calloc) 배열 할당에 주로 사용 특정크기의 배열을 담을 수 있을 만큼 충분히 큰 메모리를 할당(두 개의 parameter 사용) 첫 번째 요소의 위치를 돌려줌 할당한 메모리의 값을 0으로 초기화 조심: 문자일 때 ‘NULL’ 값이 아니다. void *calloc(size_t element-count, size_t element-size)

Figure 10-17

메모리재할당( realloc) 비효율적일 수 있으므로 사용에 주의 이전 메모리 끝부분의 메모리를 제거하여 확장 또는 새로운 메모리에 이동하여 확장 따라서 이전 메모리의 위치를 절대위치로 받아서 사용하는 포인터는 위치를 조정하지 않으면 다른 메모리를 가리킬 수 있음 void *realloc(void *ptr, size_t newSize);

Figure 10-18

메모리 해제(free) 할당한 메모리를 더 이상 사용할 필요가 없을 때 사용 void free(void *ptr); 혹시 다른 변수가 아직 사용함에도 free하면 dangling 발생 어떤 메모리를 모든 접근할 수 변수가 다른 메모리를 가리키게 되면 garbage 발생

Figure 10-19

포인터 배열 다양한 크기의 배열이 다수 필요할 때 사용 다음 슬라이드 참고 table+1과 같은 연산은 불가능하다!!!!!!

Figure 10-20

Figure 10-21

Figure 10-22

Figure 10-23

포인터를 이용한 정렬 스트링 정렬(추후 설명) 원래 자료는 그대로 두고 정렬은 따로 이런 것과 비슷한 개념이 inverted file임

Figure 10-25

Figure 10-26

10장 실습 및 11장 예습 10장 38, 39, 44, 49 51 (집에서 해 와도 됨) ---- 해결한 사람에게 10점 추가로 부여 11장 11, 12, 16, 19, 24