ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 변수와 포인터
    Programming🧑‍💻/Cpp 2025. 1. 30. 23:48

    변수 선언

    변수를 선언하면 해당 변수의 값을 저장하기 위한 메모리를 할당한다.

    이때 얼만큼의 메모리를 할당할지는 변수의 타입에 따라 결정된다.

    예를 들어 일반적으로 int 타입의 경우에는 4byte를 char 타입의 경우 1byte를 할당한다.

    2025.01.30 - [Programming🧑‍💻/Cpp] - 변수와 포인터

    시스템 내부적으로 룩업 테이블이라는 것을 가지고 있으며 해당 테이블에는 변수명, 변수 타입, 메모리 시작 주소를 가지고 있다.

    변수를 선언한 다음에 `a = 5` 명령어가 실행되면 내부적으로는 룩업 테이블에서 변수명 a에 대응하는 메모리 시작 주소를 찾아가서 5라는 값을 저장한다.

    포인터란?

    다른 변수의 주소를 값으로 저장하는 변수

    변수를 선언하는 이유는 숫자나 문자와 같은 특정한 '값'을 저장하기 위함입니다.

    하지만 일반적인 값이 아닌 메모리의 주소값을 저장하기 위해 사용하는 변수가 있는데 이를 포인터라고 부릅니다.

    포인터를 선언할 때는 '*' 를 이용합니다.

    1. 변수 a를 선언하고

    2. 포인터 p를 선언합니다. ( * 포인터와 변수의 타입은 일치해야합니다. )

    3. 변수 a에 값 5를 할당하고

    4. 포인터 p에 변수 a의 메모리 주소를 할당합니다. ( '&'는 변수의 메모리주소를 나타냅니다. )

    아래 그림과 같이 변수 a는 값 5를 할당했지만 포인터 p의 경우 일반적인 값대신 변수 a의 주소를 할당하였습니다.

    결과적으로 우리는 포인터 p를 이용해 변수 a의 메모리상의 위치를 알 수 있게 되었습니다.

    #include<stdio.h>
    int main()
    {    // 일반 변수의 경우 선언만 하면 garbage 값으로 초기화
        int a; 
        // 포인터의 경우 초기화하지 않고 접근시 error 
        int *p;
        // & : 해당 변수의 주소값을 의미  
        p = &a 
    
        print("%d\n", p ) // 변수 a의 주소값이 출력
        print("%d\n", &p) // 포인터 p의 주소값이 출력 
     }

     

    역참조

     

    참조(Reference)는 포인터가 다른 변수의 메모리 주소를 가리키는 것을 의미합니다.

    예를 들어 변수의 주소를 포인터에 저장하는 과정이 참조입니다.

     

    역참조(Dereference)는 포인터에 저장된 메모리 주소를 통해 실제 저장된 값을 가져오는 과정입니다.

    C/C++ 언어에서는 포인터 변수 앞에 '*' 연산자를 붙여 역참조를 수행합니다.

    이 연산자를 통해 포인터가 가리키는 메모리 주소에 저장된 실제 값에 접근할 수 있습니다.

     

    int value = 10;     // 일반 변수
    int* ptr = &value;  // 참조: value의 주소를 포인터 ptr에 저장
    int result = *ptr;  // 역참조: ptr이 가리키는 주소에 있는 값(10)을 가져옴

     

    댓글

Designed by Tistory.