Programming

C언어 – 포인터 개념2

#include <stdio.h>
int main() {
   int a[] = {0, 2, 4, 8};
   int b[3];
   int* p;
   int sum = 0;
   int i;
   for (i=1; i<4; i++) {
       p = a + i;
       b[i-1] = *p - a[i-1];
       sum = sum + a[i] + b[i-1]; }
   printf("%d", sum);
   return 0;
}

다음의 코드에서 포인터의 개념은 int* p 라고 포인터를 선언한 것과, for 문에서 p값이 a +i 를 합한 것과 같다는 부분에서 볼 수 있다.

a는 4개가 할당되어 있고, b는 3개가 할당 되어있다. 0으로 시작하기 때문에

a는 다음과 같고,

0123
a0248

p는 0이 있는 위치부터 가리키고 있다고 할 수 있다. b는 아직 받은 값이 없으니 비어있고,

012
b

p = a + i 부분은 i는 우선 1부터 2, 3 까지로 4보다 적은 숫자까지 돌아간다. 그렇다면 a는 주소 0부터 시작하기 때문에 0 + 1 로 p는 1의 값으로 우선 나온다.

이 때 b[i-1] = *p – a[i-1]은 *p가 1이라는 주소에 있는 값을 반환받길 원한다.

즉 a의 2. b[0] = 2 – a[0] = 2 – 0 = 2 이다.

sum += a[i] + b[i-1]로도 표현할 수 있는데 sum = 0 + a[1] + b[0] = 0 + 2 + 2 = 4

p = a + i 는 p가 a[i]에서 i값을 가지고 온다고 보면 되고 포인터 *p는 해당 a[i]값을 가지고 온다.

p = 2,

b[1] = *p – a[1] = 4 – 2 = 2

sum = 4 + 4 + 2 = 10

p=3, b[2] = 8 – 4 = 4, sum = 10 + 8 + 4 = 22

저 코드를 돌린 값은 22이다.

b도 for문이 다 돌고 난 뒤라서 채워진다.

012
b224
실제 결과값

코드를 돌기전에 일단 쭉 나열해서 풀어봤다.

포인터의 개념은 주소와 값 중에 값을 빨리 반환 받기 위해서 사용하는 게 핵심인 것 같다.

추가로 좀 더 배웠는데 이것도 포스팅할 예정이다.😎

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

error: Content is protected !!