티스토리 뷰

 

안녕하세요 쫑쫑 블로그 입니다.

오늘은 포인터에 대한 예제를 풀어보도록 하겠습니다.

중요한 개념이라 예시까지 꼭꼭 해보시기 바랍니다!

 

 

 

문제 1: 사용자로 부터 배열 3개를 입력받은 후 포인터를 이용해 입력된 정수를 출력하시오

#include

int main() {

int arr[3];

int *arr2[3];

for (int i = 0; i < 3; i++) {

scanf_s("%d", &arr[i]);

arr2[i] = &arr[i];// 포인터에 주소 값 저장

}

for (int i = 0; i < 3; i++) {

printf("%d ", *arr2[i]); //저장한 주소 값의 본 값 출력

}

}

이 방식이 쉽게 생각가능한, 배열을 포인터를 사용해 출력하는 방식입니다.

하지만 과연 굳이 배열을 사용해야 할까요?!

다음 방식을 한번 보시죠.

 

#include

int main() {

int sum = 0;

int arr[5] = { 100, 200, 300, 400, 500 };

int *point;

 

point = arr;// point 는 배열의 주소를 가져오므로 &arr[0]의 주소를 가져오는 것과 똑같습니다.

 

for (int i = 0; i < 5; i++) {

sum += *point++;

}

/* point의 주소값을 +하는 과정이므로 &arr[0] == point; &arr[1] == point++; ... 이므로

메모리 주소값에 저장되어 있는 본 값을 더하고 다음 메모리 주소값에 있는 본 값을 더합니다.

예를 들어 point == 100; point+1 == 104; point+2 == 108;

배열 주소 arr[0] == 200; arr[1] == 204; arr[2] == 208;

형식이 int 이므로 배열의 주소값은 4씩 증가 (int 4바이트)

point = arr; ->이말은 point의 주소 값 100 arr[0]의 주소 값을 일치 시킨다는 말이므로

따로 포인터를 배열로 설정할 필요가 없습니다.

*/

printf("%d", sum);

return 0;

}

이 방식은 배열을 사용하지 않고 포인터의 특징(주소 값)을 이용하여 표현한 방식입니다.

원리만 알고 계시다면 훨씬 간단하게 코딩이 가능합니다.

 

 

 

포인터 변수에서의 증감 연산자를 설명드리겠습니다.

*point + 1 = point 가 가지고 있는 주소 값에 1을 증가

*(point +1) = point 주소 값에 1을 증가 시킨 후 그 본 값을 구함

*point++ = point 주소 값에 저장된 본 값을 구한 다음에 1을 계속 증가

(*point)++ = point 주소 본 값을 1씩 증가

*++point = point 주소 값에 1을 증가 시킨 다음에 해당 주소에 있는 본 값을 구함

이 문장들이 이해가 간다면 포인터에 개념에 대하여 이해를 잘 하신 것입니다.

만일 이해가 잘 가시지 않는다면 전 편인 포인터의 개념 부분을 읽고 오셔야합니다!!

작은 과정이 아닌 중요한 과정입니다.

 

 

 

다음 문제입니다.

A에 대입되어 있던 수와 B에 대입되어 있던 수를 함수를 사용하여 바꾸시오.

#include

 

void SwapInt(int *x, int*y);

int main() {

int a, b;

scanf_s("%d%d", &a, &b);

SwapInt(&a, &b);

printf("a = %d, b = %d\n", a, b);

return 0;

}

 

void SwapInt(int *x, int *y){

int temp;

temp = *x;

*x = *y;

*y = temp;

return;

}

왜 함수를 사용하는데 포인터를 사용할까요?

포인터를 사용하지 않는다면 함수에서 원하는 값에 대한 정보가 저장된 주소 값을 다시 불러올 수 없기 때문에 포인터 변수를 사용하여야 합니다.

 

지금은 이해가 잘 되지 않더라도 예시를 천천히 따라하시되 포인터의 주소 값에 대한 개념을 천천히 생각하시면서 이해 하는 것이 목표입니다.

 

 

 

 

 

 

한 개의 양의 정수 1개를 함수 입력 값으로 받아서(양의 정수가 아닌 경우 함수가 종료됩니다), 1부터 전달받은 양수n까지의 합계를 구해 합계를 포인터를 통해 전달하는 sum() 함수를 작성 하시오.

 

#include "pch.h"

#include

int SumInt(int *num);

int main() {

int result;

int num1;

scanf_s("%d", &num1);

if (num1 <= 0) {

printf("잘못입력하셨습니다.\n");

return -1;

}

result = SumInt(&num1);

printf("%d", result);

return 0;

}

 

int SumInt(int *num) {

int sum = 0;

for (int i = 1; i <= *num; i++) {

sum += i;

}

return sum;

}

방금과 비슷한 함수를 사용하는데 함수 값을 포인터로 받는 경우 입니다.

이해가 혹시 잘 되지 않거나 궁금하신 분은 댓글로 내용을 남겨주세요.

지금까지 쫑쫑블로그였습니다.

댓글과 공감은 사랑입니다.