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