쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)

Slides:



Advertisements
Similar presentations
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
Advertisements

구조체, 포인터 활용 컴퓨터시뮬레이션학과 2014년 봄학기 담당교수 : 이형원 E304호,
포인터란? 사전적 의미로써 지시자 혹은 가리키는 것으로 풀이할 수 있으나, C프로그래밍 언어에서는 메모리의 주소를 저장하는 변수이다. 포인터 자체가 하나의 변수이기 때문에 포인터도 메모리 내에서 선언이 되며 일반 상수를 저장하는 변수가 아닌 주소값을 저장하는 변수라는 점에서.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
슬라이드 1~21까지는 각자 복습! 슬라이드 22부터는 수업시간에 복습
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
Power C++ 제6장 포인터와 문자열.
제 9 장 포인터.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
C++ Espresso 제3장 배열과 포인터.
Part 11 문자열 ©우균, 창병모 ©우균, 창병모.
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express.
제14장 동적 메모리.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
제 9 장 구조체와 공용체.
-Part2- 제3장 포인터란 무엇인가.
11장 구조체와 열거형 구조체의 정의 구조체 변수의 선언 구조체 초기화 및 사용 구조체 재정의 포인터를 이용해서 구조체 사용
쉽게 풀어쓴 C언어 Express 제8장 함수 C Express Slide 1 (of 26)
윤 홍 란 포인터 윤 홍 란
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
자료 구조: Chapter 3 (2)구조체, 포인터
6장. printf와 scanf 함수에 대한 고찰
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
개정판 누구나 즐기는 C언어 콘서트 제9장 포인터 출처: pixabay.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 02. 프로그램의 기본구성.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C 프로그래밍.
Dynamic Memory and Linked List
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
포인터 활용 포인터 활용.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
쉽게 풀어쓴 C언어 Express 제10장 배열 C Express Slide 1 (of 32)
14장. 포인터와 함수에 대한 이해.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
11장. 1차원 배열.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
처음으로 배우는 C 프로그래밍 제4부 복합 데이터 형 제 8 장 배열, 주소, 포인터.
JA A V W. 03.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
제13장 전처리 및 기타기능.
19. 함수 포인터와 void 포인터.
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
구조체.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
포인터 1차원 배열과 포인터 2차원 배열과 포인터 문자열 배열과 포인터 포인터 배열
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
C언어 프로그래밍의 이해 Ch08. 배열과 문자열.
8주차: Strings, Arrays and Pointers
-Part1- 제7장 반복문이란 무엇인가.
^^ Computer Programming 2 dmpr.cnu.ac.kr/~daygax.
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
Summary of Pointers and Arrays
Numerical Analysis Programming using NRs
실습과제 1번 생성된 파일 basic.txt를 프로젝트 폴더에서 메모장으로 열고 내용을 확인
argc, argv 의 사용방법 #include <stdio.h>
Chapter 16. 메모리 동적 할당.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
13. 포인터와 배열! 함께 이해하기.
개정판 누구나 즐기는 C언어 콘서트 제14장 전처리와 분할 컴파일리 출처: pixabay.
Pointers summary.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)

이중 포인터 이중 포인터(double pointer): 포인터를 가리키는 포인터 int i = 100; // i는 int형 변수 int *p = &i; // p는 i를 가리키는 포인터 int **q = &p; // q는 포인터 p를 가리키는 이중 포인터 Slide 2 (of 22)

이중 포인터 // 이중 포인터 프로그램 #include <stdio.h> int main(void) { int i = 100; int *p = &i; int **q = &p; *p = 200; printf("i=%d *p=%d **q=%d \n", i, *p, **q); **q = 300; return 0; } i=200 *p=200 **q=200 i=300 *p=300 **q=300 Slide 3 (of 22)

포인터 배열 포인터 배열(array of pointers): 포인터를 모아서 배열로 만든것 int a = 10, b = 20, c = 30, d = 40, e = 50; int *pa[5] = { &a, &b, &c, &d, &e }; Slide 4 (of 22)

문자열 배열 문자열 배열 가장 많이 사용되는 포인터 배열 문자열들을 효율적으로 저장할 수 있다. char *fruits[ ] = { "apple", "blueberry", "orange", “melon" }; Slide 5 (of 22)

문자열 상수의 의미 문자열 상수는 문자열의 시작 번지를 반환한다. 포인터 배열의 각 원소들은 이 시작 번지로 초기화된다. Slide 6 (of 22)

함수 포인터 함수 포인터(function pointer): 함수를 가리키는 포인터 반환형 (*함수포인터이름)(매개변수1, 매개변수2, ...); Slide 7 (of 22)

fp1.c // 함수 포인터 #include <stdio.h> // 함수 원형 정의 int add(int, int); int sub(int, int); int main(void) { int result; int (*pf)(int, int); // 함수 포인터 정의 pf = add; // 함수 포인터에 함수 add()의 주소 대입 result = pf(10, 20); // 함수 포인터를 통한 함수 add() 호출 printf("10+20은 %d\n", result); pf = sub; // 함수 포인터에 함수 sub()의 주소 대입 result = pf(10, 20); // 함수 포인터를 통한 함수 sub() 호출 printf("10-20은 %d\n", result); return 0; } Slide 8 (of 22)

fp1.c int add(int x, int y) { return x+y; } int sub(int x, int y) 10+20은 30 10-20은 -10 Slide 9 (of 22)

다차원 배열과 포인터 2차원 배열 int m[3][3] 1행->2행->3행->...순으로 메모리에 저장(행우선 방법) Slide 10 (of 22)

2차원 배열과 포인터 배열 이름 m은 &m[0][0] m[0]는 1행의 시작 주소 m[1]은 2행의 시작 주소 ... Slide 11 (of 22)

multi_array.c // 다차원 배열과 포인터 #include <stdio.h> int main(void) { printf("m = %p\n", m); printf("m[0] = %p\n", m[0]); printf("m[1] = %p\n", m[1]); printf("m[2] = %p\n", m[2]); printf("&m[0][0] = %p\n", &m[0][0]); printf("&m[1][0] = %p\n", &m[1][0]); printf("&m[2][0] = %p\n", &m[2][0]); return 0; } m = 1245020 m[0] = 1245020 m[1] = 1245032 m[2] = 1245044 &m[0][0] = 1245020 &m[1][0] = 1245032 &m[2][0] = 1245044 Slide 12 (of 22)

2차원 배열과 포인터 연산 m에 대한 연산의 의미 m은 &m[0][0] m+1은 m[1] m+2은 m[2] Slide 13 (of 22)

two_dim_array.c #include <stdio.h> int main(void) { printf("m = %p\n", m); printf("m+1 = %p\n", m+1); printf("m+2 = %p\n", m+2); printf("m[0] = %p\n", m[0]); printf("m[1] = %p\n", m[1]); printf("m[2] = %p\n", m[2]); return 0; } m = 1245020 m+1 = 1245032 m+2 = 1245044 m[0] = 1245020 m[1] = 1245032 m[2] = 1245044 Slide 14 (of 22)

void 포인터 순수하게 메모리의 주소만 가지고 있는 포인터 가리키는 대상물은 아직 정해지지 않음 (예) void *vp; 다음과 같은 연산은 모두 오류이다. *vp; // 오류 *(int *)vp; // void형 포인터를 int형 포인터로 변환한다. vp++; // 오류 vp--; // 오류 Slide 15 (of 22)

vp.c #include <stdio.h> int main(void) { int a[] = { 10, 20, 30, 40, 50 }; void *vp; vp = a; // 가능 vp = &a[2]; // 가능 *vp = 35; // 오류 vp++; // 오류 *(int *)vp = 35; // 가능 return 0; } Slide 16 (of 22)

main() 함수의 인수 지금까지의 main() 함수 형태 외부로부터 입력을 받는 main() 함수 형태 int main(void) { .. } int main(int argc, char *argv[]) { .. } Slide 17 (of 22)

인수 전달 방법 C: \cprogram> mycopy src dst Slide 18 (of 22)

main_arg.c #include <stdio.h> int main(int argc, char *argv[]) { int i = 0; for(i = 0;i < argc; i++) printf("명령어 라인에서 %d번째 문자열 = %s\n", i, argv[i]); return 0; } Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. c:\cprogram\mainarg\Debug>mainarg src dst 명령어 라인에서 0번째 문자열 = mainarg 명령어 라인에서 1번째 문자열 = src 명령어 라인에서 2번째 문자열 = dst c:\cprogram\mainarg\Debug> Slide 19 (of 22)

비주얼 C++ 프로그램 인수 입력 방법 Slide 20 (of 22)

mile2km.c #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { double mile, km; if( argc != 2 ){ printf("사용 방법: mile2km 거리\n"); return 1; } mile = atof(argv[1]); km = 1.609 * mile; printf("입력된 거리는 %f km입니다. \n", km); return 0; Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. c:\cprogram\mainarg\Debug>mainarg 10 입력된 거리는 16.090000 km입니다. c:\cprogram\mainarg\Debug> Slide 21 (of 22)

Q & A Slide 22 (of 22)