您的位置:首页 > 编程语言 > C语言/C++

动态申请二维数组两种方法

2016-08-23 15:30 302 查看
#include <iostream>

int main()
{
int row = 4;
int col = 4;

//1. 动态申请二维数组(内存连续),前提要知道列数,这里是三列
int (*a)[3] = (int (*)[3])malloc(row * 3 * sizeof(int));//int (*a)[3] = (int (*)[3])malloc(row * sizeof(int[3]));效果一样//[]中必须是常量
//1~9赋值
for (int i = 0; i < row; i++)
{
for (int j = 0; j < 3; j++)
{
static int val = 1;
a[i][j] = val;
val++;
std::cout << a[i][j] << '\t';
}
std::cout << std::endl;
}
//释放
free(a);

//用new实现
int (*a2)[3] = new int[row][3];
for (int i = 0; i < row; i++)
{
for (int j = 0; j < 3; j++)
{
static int val = 1;
a2[i][j] = val;
val++;
std::cout << a2[i][j] << '\t';
}
std::cout << std::endl;
}
delete [] a2;

//2. 二重指针模拟二维数组,列数可以是变量,这其实不是严格意义上的二维数组
int ** b = (int **)malloc(row * sizeof(int *));
for (int i = 0; i < row; i++)
{
b[i] = (int *)malloc(col * sizeof(int));//列数为3,同理可以生成锯齿数组
}
//1~9赋值
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
static int val = 1;
b[i][j] = val;
val++;
std::cout << b[i][j] << '\t';
}
std::cout << std::endl;
}
//释放
for (int i = 0; i < row; i++)
{
free(b[i]);
}
free(b);

//用new实现
int ** b2 = new int*[row];
for (int i = 0; i < row; i++)
{
b2[i] = new int[col];
}
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
static int val = 1;
b2[i][j] = val;
val++;
std::cout << b2[i][j] << '\t';
}
std::cout << std::endl;
}
for (int i = 0; i < row; i++)
{
delete [] b2[i];
}
delete [] b2;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 C++