반응형
안녕하세요. 훈츠입니다. 금일은 어제에 이어 포인터 2편을 이어가겠습니다. C 언어의 포인터 강좌와 같은 부분이 너무 많아서 이전 포스팅 붙여 넣습니다.
https://rain2002kr.tistory.com/152?category=382972
목 차
- 이중 포인터 (**) , int **pPtr; : int *형 메모리 주소를 저장 하는 변수 선언
- 구조체 포인터 (**), DATA *pPtr = new DATA[3] ; : DATA *형 메모리 주소를 저장 하는 변수 선언
이중 포인터
- 역활 : 포인터 변수의 메모리 주소를 저장하는 변수
- 형식 : 데이터형 **변수명;
- int **pPtr; : int형 변수의 메모리 주소를 가지는 포인터의 포인터 선언
- 포인터 변수의 메모리 주소를 저장.
- 활용 예시
- 변수 <-> 포인터 <-> 이중 포인터
- 포인터 변수의 메모리 주소를 저장
- 열의 개수가 서로 다른 배열을 생성
- **ptr -> [행][열] 개념으로 사용 가능합니다.
- int **ppPtr : 이중 포인터 선언
- ppPtr = new int *[3] ; : int형 변수의 주소값을 가지는 3개의 행 생성
- delete [] ppPtr[n] : 포인터 해제1
- delete [] ppPtr : 포인터 해제2
int main()
{
int** ppPtr;
ppPtr = new int* [3];
ppPtr[0] = new int[3];
ppPtr[1] = new int[2];
ppPtr[0][0] = 0;
ppPtr[0][1] = 1;
ppPtr[0][2] = 2;
ppPtr[1][0] = 3;
ppPtr[1][1] = 4;
cout << "ptr :" << ppPtr[0][1] << " Add " << ppPtr[0] << endl;
cout << "ptr :" << ppPtr[0][2] << " Add " << ppPtr[1] << endl;
//해제는 역순으로 해줘야함.
delete[] ppPtr[0];
delete[] ppPtr[1];
delete[] ppPtr[2];
delete[] ppPtr;
}
구조체 포인터
- 역활 : 포인터 구조체의 메모리 주소를 저장하는 변수
- 형식 : 데이터형 **변수명;
- STRUCT DATA *ptr; : DATA형 구조체의 첫번째 메모리 주소를 가지는 포인터 선언
- 구조체의 첫번째 메모리 주소를 저장.
struct DATA
{
int val;
int* pval ;
};
int main()
{
DATA *pPtr = new DATA; //Data 형태의 포인터 선언
pPtr->val = 33;
pPtr->pval = new int(3); //Data 형 안에 포인터에 값 할당
cout << pPtr->val << endl;
cout<< *pPtr->pval << endl;
// 해제는 항상 안쪽 포인트 부터 해제후, 다음 메모리 공간 해제
delete pPtr->pval;
delete pPtr;
}
'컴퓨터 언어 > C++' 카테고리의 다른 글
[C++] C++ 8일차 클래스 2 접근지정자(public, private , protected ) (0) | 2020.04.07 |
---|---|
[C++] C++ 8일차 클래스 1 (0) | 2020.04.06 |
[C++] C++ 6일차 메모리1 : new and delete 포인터1 (0) | 2020.04.04 |
[C++] C++ 5일차 표준 입 출력 : cin.get 함수 cin.getline 함수 (0) | 2020.04.03 |
[C++] C++ 4일차 표준 입 출력 : std::cout , endl, cin (0) | 2020.04.02 |