두개의 포인터로 배열을 함수에게 전달해주는 방법

이는 배열의 첫주소와 배열의 마지막주소를 함수에게 전달해 사용하는 방법. 주로 마지막 주소는 마지막 주소보다 +1된 주소를 전달한다. 예제를 보자.

배열의 평균을 구하는 코드이다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

double average(double*, double*);

int main()
{
	double arr1[5] = { 10, 13, 12, 7, 8 };

	printf("Avg = %f\\n", average(arr1, arr1 + 5));

	return 0;
}

double average(double* start, double* end)
{
	int count = 0;
	double avg = 0.0;
	while (start < end)
	{
		avg += *start++;
		count++;
	}
	avg /= (double)count;

	return avg;
}

average함수에서 strat와 end는 등호를 붙여서 쓸수 도 있지만 부등호를 주로 사용한다.

평균을 구하기 위해 배열내의 원소 수를 구하기 위해 위 코드에서는 반복때마다 count를 증가하도록 했다. 이와 같은 결과를 내는 아래와 같은 코드도 있다.

double average(double* start, double* end)
{
	int count = end - start;
	double avg = 0.0;
	while (start < end)
	{
		avg += *start++;
	}
	avg /= (double)count;

	return avg;
}

count를 애초에 (end - start)로 할당해주고, while문안에서 count가 변화하지 않게 없애주었다. start와 end가 포인터 변수이기 때문에 가능한 일.

그리고 위의 함수를 main에서 사용할때, 인자로 arr1, arr+5를 넣어줘서 사용한다. 이때 유의할것은 +5는 마지막 주소보다 +1된 주소인데, 이건 함수 내에서 등호가 없는 부등호를 사용했기 때문이다.

C++에서 iterator라는걸 이용하는데, 이때 이 포인터 두개를 이용해서 배열을 함수에 전달해주는 방법으로 이해해야 이해가 빠르다.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

포인터 연산 총정리

Pointer operations

int arr[5] = { 100, 200, 300, 400, 500 };
	int* ptr1, * ptr2, * ptr3;

	int i;
	ptr1 = arr; // assignment,