C Express 14 2012 All rights reserved ress
- Slides: 34
쉽게 풀어쓴 C언어 Express 제 14장 포인터 활용 © 2012 생능출판사 All rights reserved ress p C Ex
이중 포인터 *q // 이중 포인터 프로그램 #include <stdio. h> int main(void) { int i = 100; int *p = &i; int **q = &p; 300 200 100 p 포인터 i *p = 200; printf("i=%d *p=%d **q=%d n", i, *p, **q); **q = 300; printf("i=%d *p=%d **q=%d n", i, *p, **q); return 0; } **q == *(*q) © 2012 생능출판사 All rights reserved q 변수 i 이중포인터 i=200 *p=200 **q=200 result i=300 *p=300 **q=300
예제 #2 #include <stdio. h> "All that glisters is not gold. " void set_pointer(char **q); char *proverb="All that glisters is not gold. "; int main(void) { char *p="zzz"; set_pointer(&p); q p *q printf("%s n", p); return 0; } void set_pointer(char **q) { *q = proverb; } © 2012 생능출판사 All rights reserved All that glisters is not gold. result
정수형 포인터 배열 int a = 10, b = 20, c = 30, d = 40, e = 50; int *pa[5] = { &a, &b, &c, &d, &e }; © 2012 생능출판사 All rights reserved
2차원 배열에 문자열을 저장 char fruits[4 ][10] = { "apple", "blueberry", "orange", “melon" }; © 2012 생능출판사 All rights reserved
문자형 포인터 배열 char *fruits[ ] = { "apple", "blueberry", "orange", “melon" }; © 2012 생능출판사 All rights reserved
예제 // 문자열 배열 #include <stdio. h> 각각의 문자열의 길이가 달라도 메모리의 낭비가 발생하지 않는다. int main(void) { int i, n; char *fruits[ ] = { "apple", "blueberry", "orange", "melon" }; // 배열 원소 개수 계산 n = sizeof(fruits)/sizeof(fruits[0]); for(i = 0; i < n; i++) printf("%s n", fruits[i]); return 0; } © 2012 생능출판사 All rights reserved fruits[0] fruits[1] fruits[2] fruits[3] a p p l e b l u e b e r o r a n g e m e l o n apple result blueberry orange melon r y
예제 // 함수 포인터 #include <stdio. h> // 함수 원형 정의 int add(int, int); int sub(int, int); 함수의 이름은 배열의 이름과 마찬가지로 함수의 시 작주소를 나타내는 포인터 상수로 간주된다. int main(void) { int result; int (*pf)(int, int); // 함수 포인터 정의 pf = add; result = pf(10, 20); printf("10+20은 %dn", result); pf = sub; result = pf(10, 20); printf("10 -20은 %dn", result); return 0; } © 2012 생능출판사 All rights reserved int add(int x, int y) { … pf } 함수 int sub(int x, int y) { … } 함수
예제 int add(int x, int y) { return x+y; } int sub(int x, int y) { return x-y; } 10+20은 30 10 -20은 -10 result © 2012 생능출판사 All rights reserved
2차원 배열의 해석 © 2012 생능출판사 All rights reserved
multi_array. c // 다차원 배열과 포인터 #include <stdio. h> int main(void) { int m[3][3] = { 10, 20, 30, 40, 50, 60, 70, 80, 90 }; printf("m = %pn", m); printf("m[0] = %pn", m[0]); printf("m[1] = %pn", m[1]); printf("m[2] = %pn", m[2]); printf("&m[0][0] = %pn", &m[0][0]); printf("&m[1][0] = %pn", &m[1][0]); printf("&m[2][0] = %pn", &m[2][0]); return 0; } © 2012 생능출판사 All rights reserved m m[0] m[1] m[2] 10 20 30 m[0][0] m[0][1] m[0][2] 40 50 60 m[1][0] m[1][1] m[1][2] 70 80 90 m[2][0] m[2][1] m[2][2] m = 1245020 m[0] = 1245020 m[1] = 1245032 m[2] = 1245044 &m[0][0] = 1245020 &m[1][0] = 1245032 &m[2][0] = 1245044 result
포인터를 이용한 배열 원소 방문 · 행의 평균을 구하는 경우 double get_row_avg(int m[][COLS], int r) { int *p, *endp; double sum = 0. 0; p = &m[r][0]; endp = &m[r][COLS]; while( p < endp ) sum += *p++; sum /= COLS; return sum; } © 2012 생능출판사 All rights reserved
포인터를 이용한 배열 원소 방문 · 전체 원소의 평균을 구하는 경우 double get_total_avg(int m[][COLS]) { int *p, *endp; double sum = 0. 0; p = &m[0][0]; endp = &m[ROWS-1][COLS]; while( p < endp ) sum += *p++; sum /= ROWS * COLS; return sum; } © 2012 생능출판사 All rights reserved
인수 전달 방법 C: cprogram> mycopy src dst © 2012 생능출판사 All rights reserved
main_arg. c #include <stdio. h> int main(int argc, char *argv[]) { int i = 0; for(i = 0; i < argc; i++) printf("명령어 라인에서 %d번째 문자열 = %sn", i, argv[i]); return 0; } c: cprogrammainargDebug>mainarg src dst 명령어 라인에서 0번째 문자열 = mainarg 명령어 라인에서 1번째 문자열 = src 명령어 라인에서 2번째 문자열 = dst c: cprogrammainargDebug> © 2012 생능출판사 All rights reserved
mile 2 km. c #include <stdio. h> #include <stdlib. h> int main(int argc, char *argv[]) { double mile, km; if( argc != 2 ){ printf("사용 방법: mile 2 km 거리n"); return 1; } mile = atof(argv[1]); km = 1. 609 * mile; printf("입력된 거리는 %f km입니다. n", km); return 0; } c: cprogrammainargDebug>mainarg 10 입력된 거리는 16. 090000 km입니다. c: cprogrammainargDebug> © 2012 생능출판사 All rights reserved
Q&A © 2012 생능출판사 All rights reserved
- All rights reserved example
- Copyright 2015 all rights reserved
- All rights reserved sentence
- Creative commons vs all rights reserved
- Confidential all rights reserved
- All rights reserved example
- Copyright © 2015 all rights reserved
- Pearson education inc all rights reserved
- Microsoft corporation. all rights reserved.
- Microsoft corporation. all rights reserved
- Microsoft corporation. all rights reserved
- Pearson education inc. all rights reserved
- Dell all rights reserved copyright 2009
- Warning all rights reserved
- Siprop
- Quadratic equation cengage
- Warning all rights reserved
- Confidential all rights reserved
- Microsoft corporation. all rights reserved
- 2010 pearson education inc
- Copyright © 2018 all rights reserved
- Gssllc
- Pearson education inc all rights reserved
- Pearson education inc. all rights reserved
- Confidential all rights reserved
- Airbus deutschland gmbh
- Ress
- C언어 express 12장
- Vpn construction
- Ress 파일
- R rights reserved
- Rights reserved
- Sql server 2008 management studio express
- Sql server 2012 express
- Negative rights vs positive rights