1. 오늘 학습 내용(키워드)

포인터의 개념에 대해 이해하고 코드스니펫을 통해 이해하는 시간을 가졌다.

  • 포인터?
    • 포인터도 변수이며, 포인터는 값을 담는 대신 변수의 주소를 담는다.
    • 예로 int*p와 같이 선언된 p는 정수를 가리키는 포인터로서 int 변수의 메모리 주소를 저장한다.
    • 포인터의 특성
      • 배열을 복사한다고 가정할 때 배열을 그대로 복사하면 자료의 타입에 따라 용량이 커져 복사할 때 복사 비용이 들게 된다.
      • C++에서는 값을 직접 복사한느 방식 대신 변수의 주소를 가리켜서 동일한 데이터에 접근할 수 있도록 해준다. 바로 포인터를 이용해서 말이다.

  • 포인터의 주요 특성
    • 변수의 주소값을 담을 수 있다.
    • 담고 있는 주소값에 해당하는 메모리에 있는 값을 읽거나 수정할 수 있다.

  • 포인터가 가져야할 정보
    • 변수의 시작 주소
    • 변수의 타입(변수의 크기를 알기 위해 필요)
  • 시작 주소는 알지만 변수 x, y의 크기 정보는 알 수 없다. 각 변수의 값을 제대로 읽으려면 포인터에 타입 정보가 함께 필요하다.
#include <iostream>
using namespace std;
int main() 
{
    int a = 10;
    int* p = &a; // 변수 a의 주소를 포인터 p에 저장
    cout << "변수 a의 값: " << a << endl;
    cout << "변수 a의 주소: " << &a << endl;
    cout << "포인터 p의 값(저장된 주소): " << p << endl;
    return 0;
}
/*
출력 결과:
변수 a의 값: 10
변수 a의 주소: 0x61ff08 (주소는 실행할 때마다 다를 수 있음)
포인터 p의 값(저장된 주소): 0x61ff08
*/

포인터를 활용하려면 해당 주소에 있는 실제 값을 읽고 수정할 수 있어야 한다.
포인터는 주소를 다루는 특성 때문에 산술 연산도 주소를 제어하는 방식으로 동작한다.

  • 역참조 연산자
    - A라는 포인터 변수가 있다면, A를 출력하면 주소값이 나오고, *A를 출력하면 해당 메모리 값이 나온다.

    - 이러한 원리로 해당 주소에 저장된 값도 변경이 가능하다.

  • 포인터 배열과 배열 포인터
    • 포인터 배열은 포인터를 원소로 갖는 배열이다.
    • 예로 int* ptrArr[4]는 크기가 4이고, 각 원소가 int*인 배열이다.
    • 배열 포인터는 배열 전체를 가리키는 포인터다.
      • 단일 변수가 아닌 배열 통째를 가리키는 변수다.

2. 느낀점

포인터에 대해 배웠지만 배열과 함께 쓸 수 있다는 것이 활용도가 높을 것 같다. 문법이 익숙치 않은 초심자들에겐 익숙해지는 연습이 필요하겠다.

3. 익일 학습 할 것

C 문법의 이해, 오늘 배운 것 복습(포인터, 포인터와 배열)

profile
🕹️🎮🍱✈️📸 안녕하세요! 게임개발에 도전하고 있습니다!

0개의 댓글