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;