컴퓨터 언어/C++

[C++] C++ 7일차 메모리2 : new and delete 포인터2

훈츠 2020. 4. 5. 15:46
반응형

안녕하세요. 훈츠입니다. 금일은 어제에 이어 포인터 2편을 이어가겠습니다. C 언어의 포인터 강좌와 같은 부분이 너무 많아서 이전 포스팅 붙여 넣습니다. 

https://rain2002kr.tistory.com/152?category=382972

 

[C] C언어 7일차 포인터2

안녕하세요. 훈츠 입니다. 포인터 정복을 해보려고 합니다. 천천히 보시죠. 포인터의 종류와 의미 포인터 (*****) , int *pPtr; : int형 메모리 주소를 저장하는 변수 선언 포인터 배열 (****) , int*pPtr[3]; : 3..

rain2002kr.tistory.com


목 차

  • 이중 포인터  (**) , 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;

}

 

반응형