매개변수를 포인터로 선언하는 경우

1. 함수 간의 변수 공유를 통한 범용의 함수 정의 

 

> 함수와 함수 간의 지역변수를 공유하기 위하여 매개변수에 포인터를 사용한다. 

> 인수와 매개변수를 통하여 변수를 공유함으로써 코딩의 유연성(flexibilty)을 줄 수 있다.

> 매개변수를 통한 변수의 공유가 없다면 반환값을 사용하여 함수 간의 값을 전달을 해야하므로 자료형마다 값을 입력받는 수많은 함수를 만들어야한다. 또한 다양한 자료형을 한꺼번에 입력받기 위한 함수를 만들기는 매우 까다롭다.

 

2. 대량의 데이터를 함수 간의 공유

 

> 배열을 함수에 전달할 때 값의 복사 방식을 사용하면 복사본을 만들기 위한 주기억장치 할당으로 실행시간 및 주기억장치 낭비가 발생할 수 있다. 따라서 C언어에서는 기본적으로 배열의 시작 주소를 넘기는 방식을 사용한다. 

 

3. 동적 할당

 

> 프로그램에서는 배열 크기를 정할 때 최악의 경우를 대비하여 최대로 잡는다. 그러나 실제로 프로그램을 실행하는 동안 배열에 저장된 배열 원소 수가 예상보다 많이 작으면 이미 할당된 배열의 기억 공간 중 사용되지 않는 부분은 낭비된다. 이를 해결하기 위해 프로그램을 실행하면서 필요할 때마다 배열을 위한 기억 공간을 할당받고 필요 없어진 공간은 해제하는 동적 할당 방법을 사용할 수 있다. 이러한 동적 할당에 포인터가 사용된다. 

 

두 변수의 값을 바꾸는 함수 

#include <stdio.h>
#pragma warning(disable: 4996)
#pragma warning(disable: 6031)

void exchange_value(int *ref1, int *ref2);

int main()
{
	int v1 = 36, v2 = 98;

	printf("before exchange: v1 = %d, v2 = %d\n", v1, v2);
	exchange_value(&v1, &v2);
	printf("after exchange: v1 = %d, v2 = %d\n", v1, v2);

	return 0;
}

void exchange_value(int *ref1, int *ref2)
{
	int temp;

	temp = *ref1;
	*ref1 = *ref2;
	*ref2 = temp;
}

 

 

 

 

두 변수를 오름차순으로 정렬하기

#include <stdio.h>
#include <math.h>
#pragma warning(disable: 4996)
#pragma warning(disable: 6031)

void sort_value(int *ref1, int *ref2);

int main()
{
	int v1 = 36, v2 = 98;

	printf("v1? ");
	scanf("%d", &v1);
	printf("v2? ");
	scanf("%d", &v2);

	sort_value(&v1, &v2);
	printf("after exchange: v1 = %d, v2 = %d\n", v1, v2);

	return 0;
}

void sort_value(int *ref1, int *ref2)
{
	int temp;

	if (*ref1 > *ref2)
	{
		temp = *ref1;
		*ref1 = *ref2;
		*ref2 = temp;
	}
}

 

 

 

두 수의 몫과 나머지

#include <stdio.h>
#include <math.h>
#pragma warning(disable: 4996)
#pragma warning(disable: 6031)

void division(int *x, int *y, int a, int b);

int main()
{
	int n1 = 75, n2 = 8, quo, rem;

	division(&quo, &rem, n1, n2);
	printf("%d / %d = %d \n", n1, n2, quo);
	printf("%d %% %d = %d \n", n1, n2, rem);
}

void division(int *x, int *y, int a, int b)
{
	*x = a / b;
	*y = a % b;
}

'프로그래밍 > C,C++' 카테고리의 다른 글

포인터  (0) 2024.06.06
다양한 함수와 변수의 참조 범위  (0) 2024.05.30
문자열 처리  (0) 2024.05.28
인수 전달하는 함수  (0) 2024.05.28
인수 전달하지 않는 함수  (0) 2024.05.27

+ Recent posts