Pro 22 multi pointer

Page 1

2014-2 기초프로그래밍 2

22.포인터의 포인터


제1장

포인터의 포인터 1.1

포인터의 포인터 선언 방법

1.1.0 포인터의 포인터 선언 방법 1

int main(void)

2

{

3

double val=3.14;

4

double *ptr1 = &val;

5

double **ptr2 = &ptr1; // 더블 포인터

6

*(ptr1) = 4.14;

7

*(*(ptr2)) = 5.14; **ptr2 = 6.14;

8 9

// 싱글 포인터

}

1.2

SWAP 예

1.2.0 SWAP (main only) 1

int _tmain(int argc, _TCHAR* argv[])

2

{

3

int a = 3;

4

int b = 4;

5

int tmp;

6

printf("a : %d b %d \n",a,b);

7 8

tmp = a;

9 10

a=b;

11

b=tmp;

12

printf("a : %d b %d \n",a,b);

13

return 0;

14 15

}

16

a : 3 b 4

17

a : 4 b 3

18

계속하려면 아무 키나 누르십시오 . . .

2


SWAP 예

1.2.1 SWAP (swap 함수) Call By Reference 복습 1

void swap(int* pa, int* pb)

2

{

3

int tmp;

4

tmp = *pa;

5

*pa=*pb; *pb=tmp;

6 7

}

8 9 10

int _tmain(int argc, _TCHAR* argv[]) {

11

int a = 3;

12

int b = 4;

13

int tmp;

14

printf("a : %d b %d \n",a,b);

15 16

swap(&a,&b);

17 18

printf("a : %d b %d \n",a,b);

19

return 0;

20 21

}

22 23

a : 3 b 4

24

a : 4 b 3

25

계속하려면 아무 키나 누르십시오 . . .

26

3


제 1 장 포인터의 포인터

1.3

SWAP (pswap 함수)

값을 바꾸는 것이 아니라 가리키는 주소값을 바꾸고자 할 때 사용

1.3.0 SWAP (pswap 함수) 1

void swap(int** pa, int** pb)

2

{

3

int* tmp;

4

tmp = *pa;

5

*pa=*pb; *pb=tmp;

6 7

}

8 9 10

int _tmain(int argc, _TCHAR* argv[]) {

11

int a = 3; //실제 값은 바뀌지 않고...

12

int b = 4;

13 14

int* pa= &a; //새로운 변수의 값이 바뀌도록 함.

15

int* pb= &b;

16

printf("*pa : %d *pb %d \n",*pa,*pb);

17 18

swap(&pa,&pb);

19 20

printf("*pa : %d *pb %d \n",*pa,*pb);

21

return 0;

22 23

}

24 25

*pa : 3 *pb 4

26

*pa : 4 *pb 3

27

계속하려면 아무 키나 누르십시오 . . .

28

4


min max 구하기 예

1.4

min max 구하기 예

1.4.0 배열의 값 중 max,min 값 구하기 예 (main only) 1 2

int _tmain(int argc, _TCHAR* argv[])

3

{

4

int arr[] = {6,3,4,1,4};

5

int max=0;

6

int min=9;

7

int size =sizeof(arr)/sizeof(int);

8

for(int i=0; i<size; i++)

9

{

10

if(arr[i] > max)

11

max = arr[i];

12

if(arr[i] < min)

13

min = arr[i];

14

}

15 16

printf("max : %d min %d",max,min);

17

return 0;

18 19

}

20

1.4.1 배열의 값 중 max,min 값 구하기 예 (swap 함수) 1 2

void min_max(int* arr, int size, int * max, int *min)

3

{

4

for(int i=0; i<size; i++)

5

{ if(arr[i] > *max)

6

*max = arr[i];

7

if(arr[i] < *min)

8

*min = arr[i];

9

}

10 11

}

12

int _tmain(int argc, _TCHAR* argv[])

13

{

14

int arr[] = {6,3,4,1,4};

15

int max=0;

16

int min=9;

17

min_max(arr,sizeof(arr)/sizeof(int), &max, &min);

18

printf("max : %d min %d",max,min); return 0;

19 20

}

21

5


제 1 장 포인터의 포인터

1.4.2 배열의 값중 max,min 값 구하기 예 (pswap 함수) 1 2

void min_max(int* arr, int size, int ** pmax, int **pmin)

3

{

4

for(int i=0; i<size; i++)

5

{

6

if(arr[i] > **pmax)

7

*pmax = &arr[i]; if(arr[i] < **pmin)

8

*pmin = &arr[i];

9

}

10 11

}

12

int _tmain(int argc, _TCHAR* argv[])

13

{

14

int arr[] = {6,3,4,1,4};

15

int max=0;

16

int min=9;

17

int* pmax=&max;

18

int* pmin=&min;

19 20

min_max(arr,sizeof(arr)/sizeof(int), &pmax, &pmin);

21

printf("max : %d min %d",*pmax,*pmin); return 0;

22 23 24 25

6

}


연습문제

연습문제

1.5

Question

1

아래프로그램은 최대 최소값을 구하기 위한 프로그램이다. min max() 함수를 완성하시오. 1.5.0 문제

1

int main()

2

{

3

int arr[] = {6,3,4,1,4};

4

int max=0;

5

int min=9;

6

int* pmax=&max;

7

int* pmin=&min;

8

min_max(arr,sizeof(arr)/sizeof(int), &pmax, &pmin);

9 10

printf("max : %d min %d",*pmax,*pmin);

11

return 0;

12

}

13 14

---------- Run GCC ----------

15

max : 6 min 1

정답 1.5.1 정답 1

void min_max(int* arr, int size, int ** pmax, int **pmin)

2

{

3

for(int i=0; i<size; i++)

4

{ if(arr[i] > **pmax)

5

*pmax = &arr[i];

6

if(arr[i] < **pmin)

7

*pmin = &arr[i];

8

}

9 10

}

11

int main()

12

{

13

int arr[] = {6,3,4,1,4};

14

int max=0;

15

int min=9;

16

int* pmax=&max;

17

int* pmin=&min;

18 19

min_max(arr,sizeof(arr)/sizeof(int), &pmax, &pmin);

20

printf("max : %d min %d",*pmax,*pmin); return 0;

21 22

}

23

7


제 1 장 포인터의 포인터

2

24

---------- Run GCC ----------

25

max : 6 min 1

다음과 같이 1차원 배열의 값이 정렬되도록 프로그램 완성하시오 1.5.2 문제

1

int main(int argc, char* argv[])

2

{

3

int arr[] = {3,4,5,2,1};

4

int tmp;

5

int len = sizeof(arr)/sizeof(int);

6

int i;

7 8

for(i=0; i<len; i++)

9

printf("%d ",arr[i]);

10

puts("\n-------------");

11 12

mysort(arr,len);

13 14 15

for(i=0; i<len; i++)

16

printf("%d ",arr[i]);

17

puts("\n");

18

return 0;

19 20

}

21

---------- Run GCC ----------

22

3 4 5 2 1

23

-------------

24

5 4 3 2 1

정답 1.5.3 정답 1

#include <stdio.h>

2

void swap(int* a, int* b)

3

{

4

int tmp;

5

tmp = *a;

6

*a = *b; *b = tmp;

7 8

}

9 10

void mysort(int *arr, int len)

11

{

12

int tmp;

13

for(int i=0; i<len-1; i++)

14 15

8

for(int j=i+1; j<len-1; j++) if(arr[i] < arr[j])


연습문제

{

16

swap(&arr[i],&arr[j]);

17

}

18 19

}

20

int main(int argc, char* argv[])

21

{

22

int arr[] = {3,4,5,2,1};

23

int tmp;

24

int len = sizeof(arr)/sizeof(int);

25

int i;

26 27

for(i=0; i<len; i++)

28

printf("%d ",arr[i]);

29

puts("\n-------------");

30 31

mysort(arr,len);

32 33 34

for(i=0; i<len; i++)

35

printf("%d ",arr[i]);

36

puts("\n");

37

return 0;

38 39

}

40

---------- Run GCC ----------

41

3 4 5 2 1

42

-------------

43

5 4 3 2 1

9


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.