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

来源:互联网 发布:lol淘宝权在哪里直播 编辑:程序博客网 时间:2024/05/16 07:52
#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;}

0 0