본문 바로가기

Embedded Programming/C/C++

포인터 연산

* 포인터와 관련된 연산의 종류

연산

설명

할당

int *p = &a;

포인터에 주소값을 할당하는 것으로, 주소연산자 또는 포인터 상수(배열 이름)으로부터 나온 주소가 되어야 한다.

간접

*p = 6;

간접연산자(*)은 포인터로 지정된 위치에 값을 조작가능

주소

int x;

int *px;

int **ppx;

 

px = &x;

ppx = &px;

포인터 변수명에 주소연산자(&)를 붙이면

포인터 변수 자체의 주소가 된다.

주로 다차원 배열에 이를 이용할 수 있다.

증가

int *p;

p++;(4byte 증가)

p += 4;(16byte 증가)

포인터의 자료형 크기만큼 가리키는 주소값을 증가시킬 수 있다.

(int *: 4byte, short *: 2byte, char *: 1byte…)

감소

int *p;

p--;(4byte 감소)

p –= 2;(8byte 감소)

포인터의 자료형만큼 가리키는 주소값을 감소시킬 수 있다.

차이

ptr1 – ptr2

같은 배열을 가리키는 포인터끼리 얼마나 떨어져있는지알 수 있다.

비교

ptr1 < ptr2

같은 배열을 가리키는 포인터끼리 비교연산(<, >, <=, >=)이 가능하다.

 

< 포인터 증가 연산 예제 >

#include <stdio.h>

int main()
{
  int array[5];
  int *ptr;
  int i;
  
  ptr = array;

  // 배열의 색인을 이용한 접근
  for(i = 0; i < 5; i++)
  {  
    printf("array[%d]에 값 입력 : ", i);
    scanf("%d"&array[i]);
  }
  
  // array를 가리키는 ptr 증가 연산으로 배열값 출력
  for(ptr = array; ptr <= &array[4]; ptr++)
    printf("*ptr : %2d\n",  *ptr);
  
  return 0;
}