모든 데이터들은 메모리의 특정 공간에 저장되어 있다.(그 공간을 '방'이라고 표현하겠다.)
한 방의 크기는 1byte로 정의한다.
프로그램 작동시 컴퓨터는 여러 방들에 있는 데이터를 필요로 한다. 이때, 어떤 방에서 어떤 데이터를 가져올지 구분하기 위해 각 방에 고유 주소(address)를 붙여준다.
// C언어에서 포인터는
(포인터에 주소값이 저장되는 데이터의 형) *(포인터의 이름);
or
(포인터에 주소값이 저장되는 데이터의 형)* (포인터의 이름);
// 예를 들어 p라는 포인터가 int 데이터를 가리키고 싶다면
int *p; // 라고 하거나
int* p; // 라고 한다.
포인터를 정의했으니 값을 넣어야 하는데, 데이터의 주소값을 어떻게 아는걸까?
단항 & 연산자는 피연산자의 주소값을 불러온다. 사용법은
그냥 이렇게 쓴다.
&주소값을 계산할 데이터
예를 들어 a의 주소값을 알고 싶다면
&a
프로그램을 하나 짜보자면
/* 포인터의 시작 */
#include <stdio.h>
int main() {
int *p;
int a;
p = &a;
printf("포인터 p 에 들어 있는 값 : %p \n", p);
printf("int 변수 a 가 저장된 주소 : %p \n", &a);
return 0;
}
포인터 p 에 들어 있는 값 : 0x7fff894c8b3c
int 변수 a 가 저장된 주소 : 0x7fff894c8b3c
p = &a; 에서 포인터 p에 a의 주소를 대입하였기 때문이다.
/* * 연산자의 이용 */
#include <stdio.h>
int main() {
int *p;
int a;
p = &a;
a = 2;
printf("a 의 값 : %d \n", a);
printf("*p 의 값 : %d \n", *p);
return 0;
}
컴파일하면
a 의 값 : 2
*p 의 값 : 2