※포인터의 개념


C에서 int형 변수 a를 선언후 10을 대입한 후의 메모리를 추상적으로 나타내면 다음과 같다. 


int a=10;

이때 a를 담고 있는 메모리 주소를 가리키는 포인터는 &a 로 표현한다. 



포인터 &a100번지에 있는 정수형 공간을, 또는 100번지에 저장된 정수가리킨다고 말한다. 

  • a의 포인터 → &a
  • &: 포인터(주소) 연산자

- &a(a의 포인터)에 들어있는 정보

  • 변수 a가 저장된 공간의 시작주소: 100
  • 변수 a가 저장되는 방식: int(4byte 정수)


※포인터가 가리키는 공간/값 얻기

포인터가 가리키는 공간을 얻는 참조연산자: *
- 사용법: * 포인터
int a;  →   *(&a)

해당 공간을 변수처럼 사용할 수 있다.


-포인터가 가리키는 값 읽어서 변수에 저장하기 

int a=10, b;

b = *(&a)


-포인터가 가리키는 공간에 값 저장하기

int a, b = 10;

*(&a) = b;


※포인터 저장


그럼 포인터는 어떤 자료형에 저장해야 하는가?

int a; int b = &a;

이렇게 하면 되나?

그럼 'int'의 간접 참조수준이 'int*'과(와) 다릅니다. 

라는 에러를 만나게 될것이다. 

포인터를 저장하기 위해서는 새로운 자료형 변수가 필요하다. 


- 포인터 자료형의 선언

  • 가리키는 자료형 *  →  int *, char*, double *, ...
  • int * : 포인터 자료형(*)인데 가리키는 자료형이 int 형


int a = 10;

int *p = &a;


이 때 '*'는 포인터라는 의미이며 참조연산자의 의미가 아님. (*(&a)에 쓰였던 *와는 다름)


- 가리키는 변수를 접근하여 읽고 쓰기



+ Recent posts