CS50 Memory (1)

daybyday·2021년 5월 23일
0

CS

목록 보기
2/3
post-thumbnail

CS50 2021 Lecture 4 Notes

Hexadecimal 십육진법


십육진법: 0~9, A~F로 수를 나타내는 방법이다.

십육진법을 표기할 때, 십진법과의 헷갈림을 방지하기 위해 0x를 앞에 붙여 표기한다.

📢 십육진법을 사용하는 예 : RGB 컬러코드, 컴퓨터의 메모리 주소


Addresses 메모리 주소


#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
}

Pointer 포인터


포인터: 메모리 주소를 담고 있는 변수, 메모리의 어떤 장소를 가리키고 있는 변수하고 생각하면 된다.

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 문자열


  • string s = "HI!"; 로 문자열을 선언한다면 다음 이미지와 같이 메모리에 문자 하나하나를 저장할 것이다.

  • 그렇게 하나하나 저장된 문자들은, 각각의 메모리 주소를 가진다.

  • 결국 string s첫번째 문자의 주소를 가리키는 포인터일 뿐인 것이다.

0개의 댓글