Summary of Pointers and Arrays

Slides:



Advertisements
Similar presentations
제철고 프로그래밍언어 2015 가을학기 강의 #2 Python 변수, 입출력, 배열 박성우 POSTECH 컴퓨터공학과 2015 년 9 월 30 일.
Advertisements

1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
C 언어 (STS ) 10. Pointer Applications.
포인터란? 사전적 의미로써 지시자 혹은 가리키는 것으로 풀이할 수 있으나, C프로그래밍 언어에서는 메모리의 주소를 저장하는 변수이다. 포인터 자체가 하나의 변수이기 때문에 포인터도 메모리 내에서 선언이 되며 일반 상수를 저장하는 변수가 아닌 주소값을 저장하는 변수라는 점에서.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
제 9 장 포인터.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
Report #5 - due: 4/13 다음 10*5의 희소 행렬 A, B를 고려하라.
Chapter 14 포인터.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
제 9 장 구조체와 공용체.
-Part2- 제3장 포인터란 무엇인가.
윤 홍 란 포인터 윤 홍 란
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
자료 구조: Chapter 3 (2)구조체, 포인터
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
개정판 누구나 즐기는 C언어 콘서트 제9장 포인터 출처: pixabay.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
5장 배열 작성자 : 변재현.
Chapter 10 Pointer Applications.
5장. 참조 타입.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C 프로그래밍.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
포인터 활용 포인터 활용.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
14장. 포인터와 함수에 대한 이해.
11장. 1차원 배열.
* 07/16/96 처음으로 배우는 C 프로그래밍 제1부 기초 제3장 치환, 주소, 대화식 입력 *
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
처음으로 배우는 C 프로그래밍 제4부 복합 데이터 형 제 8 장 배열, 주소, 포인터.
JA A V W. 03.
Arrays 요약.
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
adopted from KNK C Programming : A Modern Approach
산학협력단 연구지원금 시스템 사용자 매뉴얼 Copyrightⓒ2014 UOSICF. All Rights Reserved. 1.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
19. 함수 포인터와 void 포인터.
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
포인터 1차원 배열과 포인터 2차원 배열과 포인터 문자열 배열과 포인터 포인터 배열
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
C언어 프로그래밍의 이해 Ch08. 배열과 문자열.
처음으로 배우는 C 프로그래밍 제4부 복합 데이터 형 제 7 장 배열.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
8주차: Strings, Arrays and Pointers
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
Fucntion 요약.
Canary value 스택 가드(Stack Guard).
adopted from KNK C Programming : A Modern Approach
제 6 장 함수(functions).
데이터 동적 할당 Collection class.
Chapter 09. 포인터 1.
7주차: Functions and Arrays
adopted from KNK C Programming : A Modern Approach
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
16장. 변수, 연산자, 사용자 정의 함수 변수 배열과 객체 연산자 함수.
Numerical Analysis Programming using NRs
Structures Summary.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 23. 구조체와 사용자 정의 자료형2.
어서와 C언어는 처음이지 제21장.
13. 포인터와 배열! 함께 이해하기.
Pointers summary.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

Summary of Pointers and Arrays adopted from KNK C Programming : A Modern Approach

Copyright © 2008 W. W. Norton & Company. All rights reserved. 내용 배열 되짚어 보기 포인터 되짚어 보기 포인터와 배열 배열을 함수의 인자로 전달 다차원 배열 포인터와 가변 길이 배열 Copyright © 2008 W. W. Norton & Company. All rights reserved.

Copyright © 2008 W. W. Norton & Company. All rights reserved. 배열 되짚어 보기 배열: 같은 형의 값을 여러 개 저장할 수 있는 것과 그것의 시작 주소 Copyright © 2008 W. W. Norton & Company. All rights reserved.

Copyright © 2008 W. W. Norton & Company. All rights reserved. 배열 되짚어 보기 배열: 같은 형의 값을 여러 개 저장할 수 있는 것과 그것의 시작 주소 int foo[]= {380, 800, 777}; 777 800 주소 380 0x000 0x004 0x008 0x00c 변수명 foo foo[0] foo[1] foo[2] Copyright © 2008 W. W. Norton & Company. All rights reserved.

Copyright © 2008 W. W. Norton & Company. All rights reserved. 포인터 되짚어 보기 Pointer 가리키는 사람, 지적자, (무언가를)가리키는 막대기 포인터 변수 일반적으로 값을 저장하는 변수와 달리 주소를 저장하고 다루는 특수한 변수 707 주소 0x000 0x004 0x008 0x00c 변수명 int foo = 707; foo Copyright © 2008 W. W. Norton & Company. All rights reserved.

Copyright © 2008 W. W. Norton & Company. All rights reserved. 포인터 되짚어 보기 Pointer 가리키는 사람, 지적자, (무언가를)가리키는 막대기 포인터 변수 일반적으로 값을 저장하는 변수와 달리 주소를 저장하고 다루는 특수한 변수 707 주소 0x00c 0x000 0x004 0x008 변수명 foo p int foo = 707; int *p; p = &foo; Copyright © 2008 W. W. Norton & Company. All rights reserved.

배열: 포인터와의 관계 int foo[]= {380, 800, 777}; 777 800 주소 380 0x000 0x004 0x00c 변수명 foo foo[0] foo[1] foo[2] foo + 0 x 4 byte foo + 1 x 4 byte foo + 2 x 4 byte 변수의 시작 주소를 사용한 변환 기준 위치로 부터 X만큼 떨어진 위치를 접근할 수 있음 Copyright © 2008 W. W. Norton & Company. All rights reserved.

포인터변수명 + 인덱스 x 타입의크기 배열: 포인터와의 관계 공식 int foo[]= {380, 800, 777}; 777 주소 380 0x000 0x004 0x008 0x00c 변수명 foo foo[0] foo[1] foo[2] foo + 0 x 4 byte foo + 1 x 4 byte foo + 2 x 4 byte 변수의 시작 주소를 사용한 변환 기준 위치로 부터 X만큼 떨어진 위치를 접근할 수 있음 공식 포인터변수명 + 인덱스 x 타입의크기 Copyright © 2008 W. W. Norton & Company. All rights reserved.

Copyright © 2008 W. W. Norton & Company. All rights reserved. 포인터의 덧셈과 뺄셈 int foo[]= {10, 20, 30, 40, 50, 70, 80}; 80 70 60 50 40 30 20 10 0x00 0x04 0x08 0x0c 0x10 0x14 0x18 foo[0] foo[1] foo[2] foo[3] foo[4] foo[5] foo[6] foo[7] Address foo index Copyright © 2008 W. W. Norton & Company. All rights reserved.

Copyright © 2008 W. W. Norton & Company. All rights reserved. 포인터의 덧셈과 뺄셈 int foo[]= {10, 20, 30, 40, 50, 70, 80}; int *p, *q; 80 70 60 50 40 30 20 10 0x00 0x04 0x08 0x0c 0x10 0x14 0x18 foo[0] foo[1] foo[2] foo[3] foo[4] foo[5] foo[6] foo[7] 0xc8 0xe8 p q Address foo index Copyright © 2008 W. W. Norton & Company. All rights reserved.

Copyright © 2008 W. W. Norton & Company. All rights reserved. 포인터의 덧셈과 뺄셈 int foo[]= {10, 20, 30, 40, 50, 70, 80}; int *p, *q; p = &foo[3]; q = p + 2; 80 70 60 50 40 30 20 10 0x00 0x04 0x08 0x0c 0x10 0x14 0x18 foo[0] foo[1] foo[2] foo[3] foo[4] foo[5] foo[6] foo[7] 0xc8 0xe8 0x0c 0x10 p q Address foo index Copyright © 2008 W. W. Norton & Company. All rights reserved.

Copyright © 2008 W. W. Norton & Company. All rights reserved. 포인터의 덧셈과 뺄셈 int foo[]= {10, 20, 30, 40, 50, 70, 80}; int *p, *q; p = &foo[3]; q = p + 2; p -= 2; 80 70 60 50 40 30 20 10 0x00 0x04 0x08 0x0c 0x10 0x14 0x18 foo[0] foo[1] foo[2] foo[3] foo[4] foo[5] foo[6] foo[7] 0xc8 0xe8 0x04 0x10 p q Address foo index Copyright © 2008 W. W. Norton & Company. All rights reserved.

Copyright © 2008 W. W. Norton & Company. All rights reserved. 포인터의 덧셈과 뺄셈 int foo[]= {10, 20, 30, 40, 50, 70, 80}; int *p, *q; p = &foo[5]; q = &foo[2]; printf(“%d”, p – q); 80 70 60 50 40 30 20 10 0x00 0x04 0x08 0x0c 0x10 0x14 0x18 foo[0] foo[1] foo[2] foo[3] foo[4] foo[5] foo[6] foo[7] 0xc8 0xe8 0x10 0x08 p q Address 3 foo index Copyright © 2008 W. W. Norton & Company. All rights reserved.

Example of Array Processing with Pointers #define N 10 … int a[N], sum, *p; sum = 0; for (p = &a[0]; p < &a[N]; p++) sum += *p; Copyright © 2008 W. W. Norton & Company. All rights reserved.

Copyright © 2008 W. W. Norton & Company. All rights reserved. 연산자의 결합 Translate the following sentence to a pointer form 해석: foo 배열의 i 번째 인덱스의 값을 j로 갱신 i의 인덱스 값을 1 증가 변환: foo[i]는 p가 가리킴 (p = &foo[i];) 현재 인덱스에 p를 저장 (*p = j;) p가 다음 인덱스를 가리키도록 증가 (p = p + 1) 2와 3을 결합 (*p++ = j, ++가 * 보다 우선순위가 높음) p = &foo[i] // p is pointer variable foo[i++] = j; Copyright © 2008 W. W. Norton & Company. All rights reserved.

Copyright © 2008 W. W. Norton & Company. All rights reserved. 연산자의 결합 (exercise) Expression Meaning *p++ or *(p++) (*p)++ *++p or *(++p) ++*p or ++(*p) *p를 사용하고 p를 증가 *p를 사용하고 *p를 증가 p를 증가하고; 증가된 *p를 사용 *p를 증가하고; 증가된 *p를 사용 Copyright © 2008 W. W. Norton & Company. All rights reserved.

Copyright © 2008 W. W. Norton & Company. All rights reserved. 배열을 함수의 인자로 전달 Copyright © 2008 W. W. Norton & Company. All rights reserved.

Copyright © 2008 W. W. Norton & Company. All rights reserved. 배열을 함수의 인자로 전달하기 int find_largest(int a[], int n) { int i, max;   max = a[0]; for (i = 1; i < n; i++) if (a[i] > max) max = a[i]; return max; } int main(void) … largest = find_largest(b, N); 함수의 원형에는 배열이라는 것을 명시 주소라는 정보만으로는 배열인지 알 수 없음 마찬가지로 배열의 길이도 알 수 없음 배열로 선언된 변수는 주소를 다룸 함수에 인자로 주소 값만 전달하면 됨 Copyright © 2008 W. W. Norton & Company. All rights reserved.

Copyright © 2008 W. W. Norton & Company. All rights reserved. 함수 인자로 배열은 포인터처럼 동작 의미 1: 배열은 주소이기 때문에 함수가 쓰는 매개변수에 의해 배열의 값이 변경됨 int main(void){ int foo = 10; int baz[2] = {0}; go(foo); gon(baz); } int go(int bar){ bar++; } int gon(int bar[]){ bar[1]++; } bar = 10 bar++ go(foo); foo = 10 main()의 공간 go()의 foo의 값이 bar로 복사됨 bar = baz bar[1]++ gon(baz); baz[0]=0 main()의 공간 baz[1]=0 go()의 baz의 주소가 bar로 복사됨 실제 위치의 값 변경 Copyright © 2008 W. W. Norton & Company. All rights reserved.

Copyright © 2008 W. W. Norton & Company. All rights reserved. 함수 인자로 배열은 포인터처럼 동작 의미 2: 주소만 전달되기 때문에 배열의 크기와 속도는 관계 없음 의미 3: 매개변수를 포인터로 선언 할 수 있음 int gon(int bar[], int n){ bar[1]++; } int main(void){ int foo = 10; int baz[2] = {0}; gon(baz, 3); int gon(int* bar, int n){ bar[1]++; } int main(void){ int foo = 10; int baz[2] = {0}; gon(baz, 3); Copyright © 2008 W. W. Norton & Company. All rights reserved.

Copyright © 2008 W. W. Norton & Company. All rights reserved. 함수 인자로 배열은 포인터처럼 동작 의미 4: 배열의 일부만 전달 할 수 있음 int gon(int bar[], int n){ bar[1]++; } int main(void){ int foo = 10; int baz[10] = {0}; gon(&baz[5], 3); Copyright © 2008 W. W. Norton & Company. All rights reserved.