[내일배움캠프 Day9] 포인터

2024. 12. 27. 22:57·내일배움캠프/TIL

1. 메모리와 변수

메모리는 프로그램이 실행될 때 사용하는 RAM(Random Access Memory)의 한 부분입니다. 메모리는 여러 “칸”으로 이루어져 있고, 각 칸은 고유한 주소를 가집니다.

변수는 메모리의 특정 칸에 데이터를 저장하는 “이름표” 역할을 합니다.

int a = 10;

변수 a는 메모리의 특정 주소를 차지하고, 값 10을 저장합니다.

a의 주소는 &a로 접근할 수 있습니다.

 

2. 포인터

포인터는 다른 변수의 메모리 주소를 저장하는 변수입니다. 즉, 포인터는 메모리의 “위치”를 가리키는 역할을 합니다.

포인터 사용의 두 가지 핵심 연산은 다음과 같습니다.

  • 참조(&): 변수의 메모리 주소를 얻음.
  • 역참조(*): 포인터가 가리키는 주소에 저장된 값을 얻음.
// 'int' 타입의 데이터를 가리킬 포인터
int* ptr = &a;

 

3. 메모리와 포인터

  • a가 메모리 주소 0x100에 저장되어 있다고 가정
    • a의 값: 10
    • &a (주소): 0x100
  • ptr는 0x100을 저장하고, *ptr은 10을 반환. 이름 주소 값 타입 
a 0x100 10 int
ptr 0x200 0x100 int*
#include <iostream>
using namespace std;

int main() {
    int a = 10;       // 변수 a 선언
    int* ptr = &a;    // ptr은 a의 주소를 저장

    cout << "a의 값: " << a << endl;         // 10
    cout << "a의 주소: " << &a << endl;     // 0x100 (a의 메모리 주소)
    cout << "ptr의 값: " << ptr << endl;    // 0x100 (a의 주소, ptr이 가리키는 주소)
    cout << "ptr이 가리키는 값: " << *ptr << endl; // 10 (ptr이 가리키는 주소의 값)
}

 

4. 포인터 관련 헷갈릴 수 있는 점

  • int* ptr에서 *는 “포인터 타입”을 선언하는 것을 의미.
  • *ptr에서 *는 “역참조” 연산을 의미.

 

5. 참조와 포인터

참조와 포인터는 둘 다 다른 대상 개체를 가리킨다. 포인터는 대체로 별도의 변수인데 반해 참조는 대상에 대한 별칭이라는 차이가 있다.

  • 포인터를 얻으면 가리키는 대상의 주소를 알 수 있다. ptr이 가리키는 대상의 실제 값을 얻으려면 역참조한다(*ptr)
  • 참조값을 얻으면 컴파일러가 삽입한 코드에 의해 자동으로 역참조가 수행되고 대상값을 즉시 알 수 있다. ref의 주소를 얻으려면 주소 연산자를 명시적으로 호출해야 한다(&ref)
  • 포인터에 다른 대상의 주소를 할당할 수 있으며 어떤 객체도 가리키지 않도록 nullptr값을 줄 수도 있다. 포인터는 변수이기 때문에 다른 변수에 할당할 수 있는 자체 주소가 있다(int **intPtrPtr = &intPtr)
  • 참조는 초기화만 가능하며 다시 할당할 수 없다. 참조 변수에 대한 할당은 참조하는 원래 개체에 대한 할당을 의미하기 때문이다.

 

 

출처 : 266가지 문제로 정복하는 코딩 인터뷰 in C++

'내일배움캠프 > TIL' 카테고리의 다른 글

[내일배움캠프 Day11] 템플릿  (3) 2024.12.31
[내일배움캠프 Day10] 메모리 관리  (0) 2024.12.31
[내일배움캠프 Day8] C++ 과제 진행  (2) 2024.12.26
[내일배움캠프 Day7] Git  (1) 2024.12.24
[내일배움캠프 Day6] C++ 프로그래밍 기초  (0) 2024.12.23
'내일배움캠프/TIL' 카테고리의 다른 글
  • [내일배움캠프 Day11] 템플릿
  • [내일배움캠프 Day10] 메모리 관리
  • [내일배움캠프 Day8] C++ 과제 진행
  • [내일배움캠프 Day7] Git
개발자 밍
개발자 밍
dev0404 님의 블로그 입니다.
  • 개발자 밍
    Developer
    개발자 밍
  • 전체
    오늘
    어제
    • 분류 전체보기 (88)
      • 강의 (8)
        • UE Climbing System (3)
        • UE Dungeon (1)
        • HCI (4)
      • 책 (18)
        • 객체지향의 사실과 오해 (5)
        • Effective C++ (3)
        • 이득우의 게임 수학 (4)
        • 이것이 취업을 위한 컴퓨터 과학이다 (4)
        • 리뷰 (2)
      • C++ (2)
      • 알고리즘 (2)
      • 자료구조 (1)
      • Unreal (4)
      • 내일배움캠프 (52)
        • TIL (52)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자료구조
    객체지향
    게임수학
    c++
    컴퓨터 구조
    내일배움캠프
    알고리즘
    Effective
    언리얼
    그래픽스
    컴퓨터구조
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
개발자 밍
[내일배움캠프 Day9] 포인터
상단으로

티스토리툴바