반응형
시작하기전
1차원 포인터에 대한 개념이 부족하다면 아래 링크 참조.
https://goodprogramer.tistory.com/15
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 = # // 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 = # // 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 = # // 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 = # // 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 = # // 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 |