기초CS - 포인터 9

킴스코딩클럽·2022년 10월 21일
1

CS기초 시리즈

목록 보기
43/71

2차 배열에 동적할당 하는 과정

int**p = new int[2][3];
왜 안될까??

int array[2][3];
	int(*array)[3];
	int(*p)[3] = new int[2][3];
	//행이 동적이고 열은 고정이다 
	//완벽하게 동적이지는 않음
	delete[]p;

	//동적 1차 배열 : int *
	//동적 2차 배열 : int ** (int *[3] -> int **)
	int number = 5;
	int* p1 = &number;
	int** p2 = &p1;
	//*개수가 차원
	//int* 1차원
	//int** 1,2둘다

	int** array = new int[2][3]; 
	int** p2 = && number;
	//리터럴이라서 주소 붙이기 어려움
	//같은의미로 [2][3]에서 [3]은 그냥 주소값인 리터럴
	//그래서 불가능함
	//int * p = new int[3] >> int를 원소로 가지는 동적 배열
	int* p = new int[4];
	//int * 를 원소로 가지는 동적 배열을 구하면?
	= new int* [4];
	int* *p2 = new int* [4];
	int** p2 = new int* [4];

	//그러면 행과 열을 동적으로 모두 만드려면?
	int row{ 2 }, col{ 3 };

	int** p = new int* [row];
	//int*원소 2개에를 다시 동적으로 만들어야함
	for (int i = 0; i < row; i++)
	//위의 쌍에 해당하는 delete
	{
		p[i] = new int[col];
		//위의 쌍에 해당하는 delete
		
	}
	//만들어 낸것의 역순으로 지움
	//row >col생성순서
	p[0][0] = 1;
	for (int  i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			std::cout << p[i][j] << " ";
		}
		std::cout<<std::endl;
	}
	//사용은 이차배열과 같음
	for (int i = 0; i < row; i++)
	{
		delete[]p[i];
		p[i] = nullptr; 
       //뎅글링포인터 걱정 제거
	}
	delete[]p;
	p = nullptr;

편하게 쓰는 방법

int row{ 2 }, col{ 3 };
	int* p = new int[row * col];
	p[i * col + j]; //2차를 1차로 바꾸는 공식
	delete[] p;
profile
공부 기록용

0개의 댓글