◦ Algorithm/CS
[CS50] 16진수, 포인터
밍블리s2
2021. 11. 9. 13:07
1. 16진수
0 1 2 3 4 5 6 7 8 9 A B C D E F
16진수 앞에는 10진수 등과 구분하기 위해 숫자 앞에 0x를 붙인다.
255 = 0xff
65 = 0x41
2. 메모리 주소
int n에 50이라는 값을 저장하고 출력 => 아래 그림과 같이 컴퓨터 메모리 어딘가에 4바이트 만큼의 자리를 차지하며 저장되어 있을 것.
C에서는 변수의 메모리상 주소를 받기 위해 ‘&’이라는 연산자를 사용.
#include <stdio.h>
int main(void)
{
int n = 50;
printf("%p\n", &n);
}
예를 들어, 위와 같은 코드를 실행하면 ‘0x7ffe00b3adbc’와 같은 값을 얻을 수 있고, 이는 변수 n의 16진법으로 표현된 메모리의 주소.
‘*’를 사용하면 그 메모리 주소에 있는 실제 값을 얻을 수 있음.
#include <stdio.h>
int main(void)
{
int n = 50;
printf("%i\n", *&n);
}
위 코드는 먼저 n의 주소를 얻고, 또 다시 그 주소에 해당하는 값을 얻어와 출력한 것이므로 결국 ‘50’이라는 값이 출력.
3. 포인터
#include <stdio.h>
int main(void)
{
int n = 50;
int *p = &n;
printf("%p\n", p);
printf("%i\n", *p);
}
- int *p 에서 p앞의 *는 이 변수가 포인터라는 의미, int 는 이 포인터가 int 타입의 변수를 가리킨다는 의미.
- int *p = &n : int n의 주소를 int 타입으로 *p에 저장.
- 만약 int p = &n 이라고 p가 포인터임을 명시하지 않으면 컴파일 에러 발생. 주소는 오직 포인터에만 저장 가능.
- 첫 번째 printf문: 포인터 p의 값, 즉 변수 n의 주소를 출력.
- 두 번째 printft문: 포인터 p가 가리키는 변수의 값, 즉 변수 n의 값을 출력.
🔑 정리하기
& : What's the address?
* : Go to the address.
모두를 위한 컴퓨터 과학 (CS50 2019)
부스트코스 무료 강의
www.boostcourse.org