Pointer 란?
쉽게 말해서 메모리 상에 위치한 특정한 데이터의 주소값을 보관하는 변수이다.
포인터는 하나의 타입으로
32 비트 : 4 byte
64 비트 : 8 byte 를 차지한다.
int *p = &a;
이중 Pointer
#include <stdio.h>
int main()
{
int *numPtr1; // 단일 포인터 선언
int **numPtr2; // 이중 포인터 선언
int num1 = 10;
numPtr1 = &num1; // num1의 메모리 주소 저장
numPtr2 = &numPtr1; // numPtr1의 메모리 주소 저장
printf("%d\n", **numPtr2); // 20: 포인터를 두 번 역참조하여 num1의 메모리 주소에 접근
return 0;
}
포인터도 실제로는 변수이기 때문에 메모리 주소를 구할 수 있습니다. 하지만 포인터의 메모리 주소는 일반 포인터에 저장할 수 없고, int **numPtr2;처럼 이중 포인터에 저장해야 합니다. int **numPtr2;를 영어로 읽으면 pointer to pointer to int가 됩니다(numPtr2 → numPtr1 → num1).
여기서 이중 포인터 numPtr2를 끝까지 따라가서 실제 값을 가져오려면 **numPtr2처럼 변수 앞에 역참조 연산자를 두 번 사용하면 됩니다. 즉, 역참조를 두 번 하므로 numPtr2 ← numPtr1 ← num1과 같은 모양이 되고 num1의 값을 가져올 수 있습니다.
'C 언어' 카테고리의 다른 글
C언어 0.08 - 동적할당 (0) | 2021.10.30 |
---|---|
C 언어 0.07 - bool 자료형 (0) | 2021.10.30 |
C 언어 0.04 - 배열 ( array ) (0) | 2021.10.30 |
C 언어 0.03 - 문자열 ( string ) (0) | 2021.10.27 |
C 언어 0.02 - fgets vs scanf (0) | 2021.10.27 |