이번에는 포인터 변수 ptr에 저장된 값을 변경시키지 않고, ptr을 대상으로 덧셈 연산을 하여, 그 결과로 반환되는 주소 값을 통해서 모든 배열 요소에 접근하여 값을 2씩 증가시키는 문제이다.
<풀이 1>
#include<stdio.h>
#define SIZE 5
int main(void)
{
int arr[SIZE] = { 1 , 2, 3, 4, 5 };
int* ptr = arr;
int n = 0;
for (n = 0; n < SIZE; n++)
{
*(ptr + n);
printf("%d", ptr[n] + 2);
}
return 0;
}
ptr++; 은 ptr에 저장된 값 변경하지 말자 했으므로 사용하지 못한다.
<풀이 2>
#include<stdio.h>
#define SIZE 5
int main(void)
{
int arr[SIZE] = { 1, 2, 3, 4, 5 };
int* ptr = arr;
int n = 0;
for (n = 0; n < SIZE; n++)
*(ptr + n) += 2;
for (n = 0; n < SIZE; n++)
printf("%d", arr[n]);
return 0;
}
풀이 1과의 차이점은 풀이 1은 반환되는 주소 값의 배열요소에 접근하면, 2 더 해 출력, 다음 주소 값의 배열 요소 값에 접근하면 2 더 해 출력의 형태를 띠고 있고, 풀이 2 같은 경우는 *(ptr +n) +=2를 통해 각 주소 값에 해당하는 모든 배열 요소 값에 2를 먼저 다 더해준 후, 반복문을 통해 1~5번째의 배열 요소를 출력한다는 차이점이 있다.