Pointer
는 프로그램 내에서 사용할 수 있는 데이터 유형으로 간주할 수 있다.
(char, int, double... 과 같이 데이터 유형이라고 생각하자.)
포인터는 특정 데이터 유형을 가리키는 메모리 주소를 저장하는 변수다.
int main() {
int age = 30;
printf("age's 메모리 주소 : %p\n", &age);
return 0;
// age's 메모리 주소 : 0060FF0C
// 메모리 주소는 16진수로 표현된다. 물리적 메모리 주소
}
printf에서 사용되는 &
는 해당 변수의 메모리 주소를 가져오는 데 사용된다.
[ 코드 해석 ]
1. &age
는 변수 age
의 메모리 주소를 나타낸다.
2. printf("age's 메모리 주소 : %p\n", &age);
는 변수 age가 저장된 메모리 주소를 출력한다.
3. %p
는 printf
함수에서 포인터를 출력할 때 사용되는 형식 지정자이다.
inside of a pointer variable
포인터 변수를 만들 때, 실제로 물리적 메모리 주소가 필요하다.
포인터 변수를 왜 생성하는가?
➡️ 특정 변수의 메모리 주소를 저장하려고.
int main() {
int age = 30;
int * pAge = &age; ✅
double gpa = 3.4;
double * pGpa = &gpa; ✅
char grade = 'A';
char * pGrade = &grade; ✅
printf("age's 메모리 주소 : %p\n", &age);
return 0;
// age's 메모리 주소 : 0060FF0C
// 메모리 주소는 16진수로 표현된다. 물리적 메모리 주소
}
pAge
변수 앞에 있는 p
는 포인터 변수를 의미한다.
&
연산자는 변수 앞에 붙혀 그 변수의 메모리 주소를 가져오는 역할을 한다.
age
자체는 정수값
을 가지고 있지만, &age
는 age
정수가 저장된 메모리 주소
를 가리키는 포인터를 반환한다.
메모리 주소는 물리적 메모리 주소이다. (RAM)
pAge
변수 앞에 있는 p
는 포인터 변수를 의미한다.