Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)"— Presentation transcript:

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

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

3 이중 포인터 // 이중 포인터 프로그램 #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= **q=200 i=300 *p= **q=300 Slide 3 (of 22)

4 포인터 배열 포인터 배열(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)

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

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

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

8 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)

9 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)

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

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

12 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 = m[0] = m[1] = m[2] = &m[0][0] = &m[1][0] = &m[2][0] = Slide 12 (of 22)

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

14 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 = m+1 = m+2 = m[0] = m[1] = m[2] = Slide 14 (of 22)

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

16 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)

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

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

19 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 ] (C) Copyright Microsoft Corp. c:\cprogram\mainarg\Debug>mainarg src dst 명령어 라인에서 0번째 문자열 = mainarg 명령어 라인에서 1번째 문자열 = src 명령어 라인에서 2번째 문자열 = dst c:\cprogram\mainarg\Debug> Slide 19 (of 22)

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

21 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 = * mile; printf("입력된 거리는 %f km입니다. \n", km); return 0; Microsoft Windows XP [Version ] (C) Copyright Microsoft Corp. c:\cprogram\mainarg\Debug>mainarg 10 입력된 거리는 km입니다. c:\cprogram\mainarg\Debug> Slide 21 (of 22)

22 Q & A Slide 22 (of 22)


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

Similar presentations


Ads by Google