두개의 포인터로 배열을 함수에게 전달해주는 방법
이는 배열의 첫주소와 배열의 마지막주소를 함수에게 전달해 사용하는 방법. 주로 마지막 주소는 마지막 주소보다 +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,