웹 프로그래밍

포인터의 정의 본문

자료구조

포인터의 정의

B. C Choi 2023. 1. 4. 22:00

포인터?

- 선언된 모든 변수는 특정한 메모리 위치에 저장되는데 그 위치를 나타내는 메모리 주소를 의미한다.

- 포인터는 자료형에 상관없이 메모리 주소 한 개의 크기인 2byte(Java에서는 4바이트)로 저장된다.

 

 

 포인터 선언

- 포인터 변수를 선언할 때 변수명 앞에 *(참조 연산자)와 변수의 주소값 &(주소 연산자)을 명시한다.

   예)  int x;    int *ptr = &x;     =>     ptr이라는 이름을 가진 포인터에 x의 주소값을 선언

- 주소 연산자 : 변수의 주소를 확인할 때 사용.

                        ※ 주소 연산자는 사용할 변수와 포인터는 같은 자료형으로 선언되어야 한다.

                        예) float x; float *ptr; (o)            int x; char *ptr = &x  (x)

- 참조 연산자 : 선언된 포인터에 참조 연산자를 사용하면 저장된 주소 또는 주소에 있는 값에 접근할 수 있다.

                        예)  ptr = &x,  *ptr = x

 

 

※ 정리

    변수 앞에 &를 붙여 선언하면 포인터,

    포인터에 *를 붙여 선언하면 포인터가 가리키는 데이터,

 

 

 포인터 연산 예제

int i = 1;         					// 변수 i가 10000번지 메모리에 저장되었을 때
int j = 2;        					// 변수 j가 20000번지 메모리에 저장되었을 때
int *ptr;

printf("i의 메모리 주소 = %u", &i);			// output : i의 메모리 주소 = 10000
printf("j의 메모리 주소 = %u", &j);			// output : j의 메모리 주소 = 20000

ptr = &i;						// 변수 ptr이 30000번지 메모리에 저장되었을 때

printf("ptr의 메모리 주소 = %u", &ptr);    	  	// output : 30000
printf("ptr의 값 = %u", ptr);				// output : 10000
printf("*ptr의 값 = %d", *ptr);				// output : 1

ptr = &j;

printf("ptr의 메모리 주소 = %u", &ptr);			// output : 30000
printf("ptr의 값 = %u", ptr);				// output : 20000
printf("*ptr의 값 = %d", *ptr);				// output : 2