Network & Server Factory

개인 공부 기록

IT 용어 & 팁

[C] 포인터 기초 정리

1nfra 2018. 4. 11. 13:08
포인터는 다른 변수의 메모리 주소를 값으로 가지는 변수입니다. &로 주소를 구해 포인터에 넣고, *로 그 주소에 있는 값을 읽거나 바꿉니다.

1. 포인터란

포인터는 메모리 주소(번지)를 저장하는 변수입니다. 값을 직접 들고 있는 대신 값이 있는 위치를 가리키므로, 그 주소를 통해 값을 읽거나 저장할 수 있습니다.

포인터가 변수의 주소를 가리키는 구조

2. 선언

자료형 뒤에 *를 붙여 선언합니다. *의 위치는 달라도 의미는 같습니다.

int* numPtr;
int * numPtr;
int *numPtr;

포인터의 자료형은 가리킬 변수의 자료형과 맞춰야 합니다. int 변수의 주소를 담는 포인터는 int *입니다.

3. 주소 저장 (&)

&(주소 연산자)로 변수의 주소를 구해 포인터에 저장합니다.

int num1 = 10;
int *numPtr;

numPtr = &num1;
printf("%p\n", numPtr);   // num1의 메모리 주소
printf("%p\n", &num1);    // 같은 값

numPtr을 출력하면 num1의 메모리 주소가 나옵니다. 즉 포인터의 값은 곧 메모리 주소입니다.

포인터에 저장된 주소 출력 결과

4. 역참조 (*)

포인터에 저장된 주소에 있는 값을 가져오려면 역참조 연산자 *를 붙입니다. *numPtr은 numPtr이 가리키는 주소로 가서 그 값을 읽습니다.

printf("%d\n", *numPtr);  // 10
*numPtr = 20;             // num1이 20으로 바뀜

역참조로 값을 읽은 결과

표현 의미
numPtr 저장된 주소
*numPtr 그 주소에 있는 값
&num1 num1의 주소

5. 정리

  • 포인터는 메모리 주소를 저장하는 변수이며, 가리킬 변수와 자료형을 맞춥니다.
  • &로 주소를 구하고, *로 그 주소의 값에 접근합니다.
  • 선언할 때의 *와 사용할 때의 *(역참조)는 역할이 다릅니다.
728x90
서울
--:--:--
-전체 글
-카테고리
오늘 방문