본문 바로가기

C

[C언어] 포인터(Pointer) - 2

반응형

포인터는 변수의 이름에 직접 접근할 수 없을 때 사용한다.

 

#include<stdio.h>

int test(int *x, int y);

int main(){
   int x = 10;   // 지역변수
   int y = 10;

   test(&x, y);

   printf("x = %d\n", x);   // test() 함수에 주소값을 보냈기 때문에 x의 값은 변하게 된다.
   printf("y = %d\n", y);

   return 0;
}

int test(int *x, int y){   // int *x == &x
   *x = 20;                // 역참조연산자: 지역이 다른 곳에 있는 변수 값을 제어한다.
                           // 해당 변수의 주소를 추적하여 실제 값을 변경한다.
   y = 20;
}

 


포인터 사용 시 주의할 점

 

1. 포인터는 초기화하고 사용하는 것이 안전하다. (실행 에러가 발생할 수 있다.)

ex) 초기화하지 않았을 때
int *p;
*p = 10;   // (오류) 포인터 p가 가리킬 주소를 지정하지 않고 값만 주었다.

2. 어떤 변수를 가리킬지 알 수 없을 때 사용한다.

3. 포인터 변수가 할당되었는지를 검사한다.

4. 포인터의 데이터형과 포인터가 가리키는 변수의 데이터형은 같아야 한다.

5. 포인터 연산에서 +/-, ++/-- 등은 주소의 증감을 나타낸다.

 

#include<stdio.h>

int main(){

   int *p = (int*)0x100;   // 포인터 연산을 확인하기 위해 절대 주소를 대입한다.
   double *q = (double*)0x100;
   char *w = (char*)0x100;

   printf("int* : %p, %p, %p\n", p, p + 1, p + 2);   
   printf("double* : %p, %p, %p\n", q, q + 1, q + 2);\
   printf("char* : %p, %p, %p\n", w, w + 1, w + 2);

   return 0;
}

 


주소는 16진수로 표시하기 때문에 'q+2'는 '00000110'으로 출력된다.

 

반응형