直接上代码
int main()
{
// new一维数组
int rows = 5;
int column = 10;
int *a1 = new int[column];
for (int i = 0; i < column; i++)
a1[i] = i;
for (int i = 0; i < column; i++)
cout << a1[i] << ' ';
cout << endl;
delete[] a1;
a1 = nullptr;
// new 二维数组
// 方法1:比较繁琐 不推荐
// 这种方法首先创建了一个指针数组 p,用于存储指向每一行的指针。然后,
// 使用循环为每一行分配了一个包含 10 个整数的数组。这种方法使用 int* 类型的指针数组
// 每个指针指向一行的数组,即列指针。
int **a2 = new int *[rows];
for (int i = 0; i < rows; i++)
a2[i] = new int[column];
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < column; j++)
{
a2[i][j] = i * column + j;
cout << a2[i][j] << ' ';
}
cout << endl;
}
cout << endl;
// 释放内存
for (int i = 0; i < rows; i++)
{
delete[] a2[i];
}
delete[] a2;
a2 = nullptr;
// 方法二 要强制类型转换,不太好
int *a3 = new int[rows * column];
// 这里是通过强制类型转换,把a4看成一个二维数组,此时a3 和 a4指向同一块内存
// 但释放的时候要释放a3,因为a4是类型转换后的指针
int(*a4)[column] = (int(*)[column])a3;
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < column; j++)
{
a4[i][j] = i * column + j;
cout << a4[i][j] << ' ';
}
cout << endl;
}
cout << endl;
delete[] a3;
a3 = nullptr;
a4 = nullptr;
// 方法三 推荐
// 直接申请二维数组大小的一维数组,控制下标即可
int *a5 = new int[rows * column];
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < column; j++)
{
a5[i * column + j] = i * column + j;
cout << a5[i * column + j] << ' ';
}
cout << endl;
}
delete[] a5;
a5 = nulptr;
// 方法四 推荐
// 使用vector容器更加安全,不用担心内存释放了
vector<vector<int>> a6(rows, vector<int>(column, 1));
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < column; j++)
{
cout << a6[i][j] << ' ';
}
cout << endl;
}
system("pause");
return 0;
}