본문 바로가기

programming language/C 언어

열혈 c프로그래밍 13-1(2)

이번에는 포인터 변수 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번째의 배열 요소를 출력한다는 차이점이 있다.