포인터는 다른 변수의 메모리 주소를 값으로 가지는 변수입니다. &로 주소를 구해 포인터에 넣고, *로 그 주소에 있는 값을 읽거나 바꿉니다.
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
'IT 용어 & 팁' 카테고리의 다른 글
| [Cisco] 명령어 오타 시 DNS 조회 멈춤 막기 (0) | 2020.08.14 |
|---|---|
| [Network] DHCP란? IP 자동 할당 과정 정리 (0) | 2020.07.06 |
| [Network] DNS란? 도메인이 IP로 바뀌는 과정 (0) | 2020.07.05 |
| [Network] 로드밸런서란? Scale-up과 Scale-out, 부하 분산 알고리즘 정리 (0) | 2020.05.05 |
| [Storage] RAID란? RAID 0, 1, 5 구조와 용량 계산 정리 (0) | 2020.05.01 |
서울
--:--:--
-전체 글
-카테고리
오늘 방문