십육진법: 0~9, A~F로 수를 나타내는 방법이다.
십육진법을 표기할 때, 십진법과의 헷갈림을 방지하기 위해 0x를 앞에 붙여 표기한다.
📢 십육진법을 사용하는 예 : RGB 컬러코드, 컴퓨터의 메모리 주소
#include <stdio.h>
int main(void)
{
int n = 50;
printf("%i\n", n);
}
위와 같이 변수 n
을 할당하면 우리의 컴퓨터 메모리 어딘가에는 50이라는 값을 가지고 있는 n
이 4바이트를 차지하고 있을 것이다.
C에서는 이 변수의 메모리를 실제로 출력해볼 수 있다.
&
연산자는 '이 변수의 메모리 주소를 가져와!'라는 연산자이다.
#include <stdio.h>
int main(void)
{
int n = 50;
printf("%p\n", &n);
}
이 때 출력되는 메모리 주소는 0x12345678
와 같은 십육진법으로 나타날 것이다.
*
연산자는&
연산자와 반대의 의미로, '가리키는 곳으로 가!'라는 의미이다.
따라서, 아래 코드는 먼저 &n
으로 변수 n
의 메모리 주소를 가져오고, *n의 메모리 주소
가 되므로 해당 메모리 주소로 가서 int
값을 출력하게 될 것이다.
#include <stdio.h>
int main(void)
{
int n = 50;
printf("%i\n", *&n); // 50
}
포인터: 메모리 주소를 담고 있는 변수, 메모리의 어떤 장소를 가리키고 있는 변수하고 생각하면 된다.
C에서 포인터 변수를 선언하기 위해서는 *
연산자를 사용한다.
❗ 위에서 해당 주소로 가라는 의미의 *
연산자와는 다른 것이다. (헷갈리게 만들어놨네...)
#include <stdio.h>
int main(void)
{
int n = 50;
int *p = &n;
printf("%p\n", p); // 변수 n의 메모리 주소 출력
}
위 코드에서 int *p
로 포인터 변수를 선언했고 &n
을 할당했다.
위와 같이 변수 n
과 포인터 변수 p
를 만들었을 경우, 우리 컴퓨터의 메모리 어딘가의 모습은 이럴 것이다.
p
도 변수이므로 메모리 어딘가에 자리를 차지하고 있을 것이고, n
의 주소를 담고 있다.
포인터 변수 p
는 4바이트의 int
보다 2배 큰 8바이트를 차지한다.
string s = "HI!";
로 문자열을 선언한다면 다음 이미지와 같이 메모리에 문자 하나하나를 저장할 것이다.
그렇게 하나하나 저장된 문자들은, 각각의 메모리 주소를 가진다.
결국 string s
는 첫번째 문자의 주소를 가리키는 포인터일 뿐인 것이다.