C++ 포인터 Pointer

m._.jooong·2023년 4월 3일
0

C++

목록 보기
9/23
#include <string>
#include <iostream>
using namespace std;

int main()
{
    /**
   자연스럽게 써야 하는 문법적 요소
   1. 포인터  Pointer
   2. 참조자 Reference
   3. 상수   Constant
   4. 동적 할당 Dynamic Memory Allocation : new연산자로 객체 생성하고
       delete 연산자로 메모리에서 객체 해제 합니다.
   5. 스마트 포인터  Smarter Pointer
       unique_ptr  : 객체의 유일한 소유권을 가지는 스마트 포인터
       shared_ptr : 객체간의 공유가 가능한 스마트 포인터
       weak_ptr : shared_ptr의 순환참조 문제를 해결한 약한 참조의 스마트 포인터
   */

    // 포인터란
    // 주소를 저장하는 변수입니다
    // 일반적인 변수는 데이터를 저장하는데 반하여 포인터는 메모리(Ram) 공간의 주소를 저장한다.
    // 포인터 변수가 주소를 저장하려면 변수의 주소를 알아야 하는데
    // 1. 변수 이름 앞에 &(주소연산자)를 붙이면 해당 변수의 시작 주소를 반환한다.
        // 변수이름 앞에 &연산자를 붙이면 해당 변수의 주소를 반환한다. // x
    // 2. 포인터 변수가 저장하는 변수의 주소에 저장된 값을 참조하려면 *(역참조 연산자)를 사용한다.

    // int포인터 타입의 intPtr1이라는 이름의 포인터 변수를 선언한다.
    // nullprt값을 intPtr1이라는 포인터 변수에 대입함으로써 초기화를 한다.
    int* intPtr1 = nullptr;

    int intValue1 = 10;
    /** intValue1변수의 주소값을 intPtr1포인터 변수에 대입했습니다. */
    intPtr1 = &intValue1;
    // 주소값은 16진수로 표시된다. RAM의 주소값이므로 컴퓨터마다 다르다
    // intValue1변수의 주소값
    cout << "intValue1 address : " << &intValue1 << endl;   // 내가 살고 있는 집 주소
    // intPtr1 포인터 변수의 값
    cout << "intPtr1 : " << intPtr1 << endl;                // 내가 살고 있는 집 주소
    // intPtr1 포인터 변수의 주소 값
    cout << "intPtr1 address : " << &intPtr1 << endl;       // 내가 살고 있는 아파트 주소
    // intPtr1 포인터 변수가 가리키는 값
    // 포인터 변수에 역참조 연산자(*)를 붙여주면 포인터 변수가 가리키는 실제 값을 알 수 있다.
    cout << "intPtr1 value : " << *intPtr1 << endl;

    cout << endl;
    cout << endl;

    // 포인터와 배열의 관계
    
    // int타입을 여러개 저장할 수 있는 배열타입으로 intArr1이라는 배열변수를 선언한다.
    // 10, 20, 30, 40, 50 의 값을 intArr1 배열에 대입함으로써 초기화를 한다.

    // 1. 변수 이름 앞에 &(주소연산자)를 붙이면 해당 변수의 시작 주소를 반환한다.
        // 변수이름 앞에 &연산자를 붙이면 해당 변수의 주소를 반환한다. // x
    int intArr1[] = { 10,20,30,40,50 };

    cout << "intArr1[0] address : " << intArr1 << endl;
    cout << "intArr1[0] address : " << &intArr1[0] << endl;

    cout << "intArr1[1] address : " << intArr1 + 1 << endl;
    cout << "intArr1[1] address : " << &intArr1[1] << endl;

    cout << "intArr1[0] value : " << *intArr1 << endl;
    cout << "intArr1[0] value : " << intArr1[0] << endl;

    cout << "intArr1[1] value : " << *(intArr1 + 1) << endl;
    cout << "intArr1[1] value : " << intArr1[1] << endl;

    cout << endl;
    cout << endl;
}


Unreal PointerStudy

0개의 댓글