C++

[C++ ] 2차원 포인터 정리

Let it out 2024. 1. 25. 06:31
반응형

시작하기전

1차원 포인터에 대한 개념이 부족하다면 아래 링크 참조.

https://goodprogramer.tistory.com/15

 

[C++ ] 1차원 포인터 정리

포인터는 C++ 의 꽃이라고 불리며 코딩을 더 편하게 하라고 만든 문법이다. 또한 C++ 을 배웠다면 꼭 알아야 할 개념이니 마스터 하고 넘어갈 것. 우선 메모리와 메모리 주소 할당 개념에 대해 알

goodprogramer.tistory.com


 

 

1. 2차원 포인터 선언 방법

1차원 포인터에서 * 을 하나 더 붙이면 2차원 포인터가 된다.

int *ptr; //1차원 포인터
int **ptr2; //2차원 포이터

 

 

* 이 하나씩 붙을 때 마다 차원이 증가하며 2차원 이상 부터는 다차원 포인터라고 불린다.

* 을 붙여 100차원 포인터 그 이상 만들 수있다. 

하지만, 다차원 포인터를 남발 시 복잡해 지므로 실무에서는 다차원 포인터 사용을 지양한다.

int ***ptr3; //3차원 포인터
int ****ptr4; //4차원 포인터
int *****ptr5; //5차원 포인터

 

 

 

2. 2차원 포인터 참조 값

1차원 포인터와 2차원 포인터의 이론은 같다. 

1차원 포인터가 변수의 메모리 주소를 가리키듯이

2차원 포인터가 1차원 포인터의 메모리 주소를 가리킨다.

이때 2차원 포인터는 1차원 포인터를 통해 변수 값 참조가 가능하다.

이게 뭔소리냐? 아래 그림을 보자.

#include <iostream>
using namespace std;

void main()
{
    int num = 5;
    int* ptr = NULL;
    int** ptr2 = NULL;

    ptr = &num; // ptr->num
    ptr2 = &ptr; // ptr2 -> ptr
}

 

아래 그림 참조

그림처럼 **ptr2이 직접적으로 num 을 가리키진 않지만,*ptr을 통해 **ptr2로 num을 가리킬 수 있다.즉 하나로 연결 되었다고 보면 된다.

 

 


 

 

3. ptr2  출력

변수, 1차원, 2차원 포인터 선언을 끝냈으니 2차원 포인터 **ptr2 사용법을 알아보자.

그냥 ptr2만 출력 시 2차원 포인터 ptr2가 가리키는 주소, 즉  1차원 포인터 ptr의 주소 값을 가리킨다.

#include <iostream>
using namespace std;

void main()
{
    int num = 5;
    int* ptr = NULL;
    int** ptr2 = NULL;

    ptr = &num; // ptr->num
    ptr2 = &ptr; // ptr2 -> ptr
    
    cout << "ptr2 가리키는 주소: " << ptr2 << endl;  //ptr2이 가리키는 주소 출력
}
결과 : ptr의 메모리 주소

 

 

 

 

4. *ptr2 출력

* 을 하나 쓰면 1차원 포인터 ptr이 가리키는 메모리 주소 즉, num의 메모리 주소를 가리킨다.

#include <iostream>
using namespace std;

void main()
{
    int num = 5;
    int* ptr = NULL;
    int** ptr2 = NULL;

    ptr = &num; // ptr->num
    ptr2 = &ptr; // ptr2 -> ptr
    
    cout << "ptr2 참조값: " << *ptr2 << endl;  // num의 메모리 주소 출력
}
결과 : num의 메모리 주소

 

 

 

 

5. **ptr2 출력

** 을 쓰면 1차원 포인터 ptr이 가리키는 num의 변수 값을 참조한다.

이것을 2중 참조라고 한다.

#include <iostream>
using namespace std;

void main()
{
    int num = 5;
    int* ptr = NULL;
    int** ptr2 = NULL;

    ptr = &num; // ptr->num
    ptr2 = &ptr; // ptr2 -> ptr
    
    cout << "ptr2 2중 참조값: " << **ptr2 << endl;  //num 값 출력
}
결과 : num 변수값(5)

 

 

 

 

6. 2차원 포인터 예제

2차원 포인터에 대한 전체 예제다.

복붙해서 실행 시킨 후 공부 할것.

#include <iostream>
using namespace std;

void main()
{
    int num = 5;
    int* ptr = NULL;
    int** ptr2 = NULL;

    ptr = &num; // ptr->num
    ptr2 = &ptr; // ptr2 -> ptr

    cout << "num 주소: " << &num << endl; //num 주소 출력
    cout << "ptr 주소: " << &ptr << endl; //ptr 주소 출력
    cout << "ptr2 주소: " << &ptr2 << endl;   //ptr2 주소 출력
    cout << endl;

    cout << "ptr 가리키는 주소: " << ptr << endl;     //ptr이 가리키는 주소 출력
    cout << "ptr2 가리키는 주소: " << ptr2 << endl;  //ptr2이 가리키는 주소 출력
    cout << endl;

    cout << "num 주소: " << num << endl;  //num 값 출력
    cout << "ptr 참조값: " << *ptr << endl;  //ptr 참조 값 출력
    cout << "ptr2 참조값: " << *ptr2 << endl;       //ptr2 참조 값 출력
    cout << "ptr2 이중 참조값: " << **ptr2 << endl;  //ptr2 이중 참조 값 출력
}

 

 

실행결과


 

 

 

반응형

'C++' 카테고리의 다른 글

[C++] C++ sqlite3.lib 만들기  (0) 2024.01.26
[C++] const (콘스트) 란?  (0) 2024.01.26
[C++ ] 1차원 포인터 정리  (0) 2024.01.25
[C++] Vector(벡터) 사용법  (0) 2024.01.18
[C++] FTP 파일 찾기 예제 (FtpFindFirstFile)  (0) 2024.01.18