본문 바로가기
cs/CS50

5: 메모리-2(포인터)

by 이쟝 2021. 12. 2.

 

#include <stdio.h>

int main(void)
{
    int n = 50;
    int p = &n;
}

 

p라는 새로운 변수를 선언(n의 포인터라는 의미로)하고 그 안에 n의 주소를 저장함

어떤 변수에 주소를 저장하고 싶다면 그 변수의 자료형뿐만 아니라 별 연산자 또한 써줘야 함

 

int main(void)
{
    int n = 50;
    int *p = &n;
}

 

포인터 = ' * ', 이 연산자는 어떤 메모리 주소에 있는 값을 받아오게 해 줌

' * '를 이용해서 포인터 역할을 하는 변수를 선언할 수 있음(변수  p)

*p라는 포인터 변수 앞의 int는 이 포인터가 가리키는 값이 int라는 뜻(*p가 가리키는 주소가 n인데 n은 int형)

다른 float나 char 등 다양한 자료형에 대한 포인터도 있음


p를 출력하기 

 

int main(void)
{
    int n = 50;
    int *p = &n;
    printf("%p\n", p);
}

 

결과

결과는 포인터 p의 값(변수 n의 주소)이 출력됨

 


포인터 p가 가리키는 변수의 값, 즉 변수 n의 값 출력하기 

 

int main(void)
{
    int n = 50;
    int *p = &n;
    printf("%i\n", *p);
}

 

결과

앞에서 말했던 것 처럼 주소가 아니라 값을 가져오려면 ' * ' 연산자를 사용해야 함 그래서 p가 아니라 *p를 출력

정수(50)는 정수형 변수(n) 안에 존재하고 이 주소는 포인터 변수(*p) 안에 있지만 개념적으로는 이 변수(p)가 다른 변수(n)를 가리키는 것


실제 컴퓨터 메모리에서 변수 p는 아래와 같이 저장될 수 있음

 

 

 

실제로 p의 값, 즉 n의 주소 값을 생각하지 않고, 추상적으로 단지 p가 n을 가리키고 있다는 것만 생각해도 됨

 

 

이런 포인터를 기반으로 해서 앞으로 배울 다양한 데이터 구조를 정의하고 사용할 수 있음

 

https://everysmallstep.tistory.com/33

 

5: 메모리-1(메모리 주소)

16진수 컴퓨터에서는 데이터를 처리하기 위해 10진수나 2진수 대신 16진수로 표현함(16진수의 장점 때문) 2진법 , 10진법, 16진법 2진법: 0과 1 - 0 bit가 8개 있고 각 bit는 한 이진수를 의미함 - 00000000 (2

everysmallstep.tistory.com

 

https://www.boostcourse.org/cs112/joinLectures/41307

 

모두를 위한 컴퓨터 과학 (CS50 2019)

부스트코스 무료 강의

www.boostcourse.org