C/C++创建二维数组的三种方法
有时数据量并不固定,开大数组有时实在浪费内存。由此我们可以开辟一个动态数组,随着数据的大小动态创建。节省大量内存,提高内存利用率。
数组本质上就是一个指针(数组名即指针)。
工具/原料
Visual Stdio
Code::Blackd
Dev-C++
方法/步骤
使用C里面的malloc函数创建

#include <iostream>
#include <cstdio>
using namespace std;//使用命名空间
int main()
{
int n = NULL;
cin >> n;
int** buffer = (int**)malloc(sizeof(int) * n);//创建二级指针
for (int i = 0; i < n; ++i)
buffer[i] = (int*)malloc(sizeof(int) * n);//创建下一级指针
for (int i = 0; i < n; ++i)//输出数据
for (int j = 0; j < n; ++j)
cin >> buffer[i][j];
for (int i = 0; i < n; ++i)//输出数据检验
for (int j = 0; j < n; ++j)
cout << buffer[i][j];
for (int i = 0; i < n; ++i)
free(buffer[i]);//释放
free(buffer);//释放
return 0;
}
使用C++中的new函数创建

#include <iostream>
using namespace std;//使用命名空间
int main()
{
int n = NULL;
cin >> n;
int** buffer = new int*[n];//创建一级指针
for (int i = 0; i < n; ++i)
buffer[i] = new int[n];//创建二级指针
//int** tmp = buffer;
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
cin >> buffer[i][j];//对创建的二维数组进行赋值操作
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
cout << buffer[i][j];//对其输出查看结果
for (int i = 0; i < n; ++i)
delete[]buffer[i];//释放二级指针
delete[]buffer;//释放一级指针
return 0;
}
使用C++中的vector头文件中的vector函数创建

#include <iostream>
#include <vector>
using namespace std;//使用命名空间
int main()
{
int n = NULL;
cin >> n;
//注意下面这一行:vector <int后两个 "> "之间要有空格!否则会被认为是重载 "> > "。
vector<vector<int> > buffer(n, vector<int>(n));
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
cin >> buffer[i][j];
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
cout << buffer[i][j];
return 0;
}
注意事项
使用malloc(new)创建的数组记得使用free(delete)释放申请的内存。俗话说有借有还再借不难。
如忘记释放内存会导致程序非常容易出现致命Bug
使用malloc或者new创建数组时,新手往往忘记使用free(delete)释放内存,而老手往往是不知道何时释放内存
个人建议使用第三种方法可以避免上述情况
在程序的最后应该加上 " trtuen 0; "表示程序正常退出。保持这种良好的习惯
核心代码均为图片标红部分