이 프로그램에서는 포인터 산술(pointer arithmetic)을 활용하여 배열 요소들의 합을 계산하는 방법을 알아봅니다.
포인터의 기본 개념
여기서 사용하는 연산자 *는 해당 메모리 주소에 저장되어 있는 값을 의미하며, 그 주소 자체는 변수에 저장됩니다. 따라서 int *ptr이라고 선언하면, ptr은 하나의 주소값을 담고 있는 변수이며, 그 주소에 저장된 내용은 정수형(integer) 값이라는 뜻입니다.
즉, *p는 p가 포인터 변수임을 나타냅니다. 이 포인터 변수와 함수 s()를 함께 사용하면 배열의 모든 요소를 순회하면서 합계를 손쉽게 구할 수 있습니다.
예제 코드
#include <stdio.h>
void s(int* a, int len) {
int i, s_of_arr = 0;
for (i = 0; i < len; i++)
s_of_arr = s_of_arr + *(a + i);
printf("sum of array is = %d", s_of_arr);
}
int main() {
int arr[] = { 1,2,4,6,7,-5,-3 };
s(arr, 7);
return 0;
}
실행 결과
Sum of array = 12
동작 원리 설명
코드의 핵심 부분은 *(a + i)입니다. 배열 이름 a는 배열의 첫 번째 요소를 가리키는 포인터처럼 동작하므로, a + i는 i번째 요소의 메모리 주소를 가리킵니다. 여기에 역참조 연산자 *를 붙이면 해당 위치에 저장된 실제 값을 읽어올 수 있습니다.
이렇게 반복문을 통해 각 요소의 값을 하나씩 더해가면 인덱스 표기법(a[i])을 사용하지 않고도 배열 전체의 합을 구할 수 있습니다. 위 예제에서는 1 + 2 + 4 + 6 + 7 - 5 - 3 = 12가 되어 최종 결과로 12가 출력됩니다.
알고리즘
시작
배열을 초기화하여 변수들을 저장한다.
함수 s를 호출하여 변수들의 합을 구한다.
합계를 출력한다.
끝.