最近需要写一个接口,函数每执行一次,需要存储448路的数据,执行第二次,仍然存储448路数据,麻烦的是,两次448路数据需要合为一个448路,这就要求,给一个二维数组,第一次直接存储,第二次,偏移一定的长度后再存储;

了解到三种方法可以实现: 1,new delete

int main()

{

//1,new delete 4*3的矩阵

int m = 4, n = 3;

//申请

int **array_new = new int *[4];

for (int i = 0; i < 4; i++)

array_new[i] = new int[3]();//加括号调用默认构造函数,初始化为0

display(array_new, 4, 3);

//释放

for (int i = 0; i < 4; i++)

delete array_new[i];

delete array_new;

return 0;

}

2,malloc,free

//2,malloc free 4*3的矩阵

int m = 4, n = 3;

//申请

int **array_new = (int**)malloc(sizeof(int*) * 4);

for (int i = 0; i < 4; i++)

{

array_new[i] = (int*)malloc(sizeof(int) * 3);

memset(array_new[i], 0, sizeof(int) * 3);

}

display(array_new, 4, 3);

//释放

for (int i = 0; i < 4; i++)

free (array_new[i]);

free (array_new);

return 0;

这里如果想把初始值用memset设为1的话,应该如何做呢? 直接把memset里的value改为1,打印输出的结果是16843009;很奇怪,但是转为二进制就明白原因了 原来memset是一个字节一个直接的设置初始值 一个字节8bit ,所以1对应0000 0001; 一个int,4个字节,所以就是: 0000 0001 0000 0001 0000 0001 0000 0001 也就是十进制的16843009

3,vector

//3,vector

//申请

vector> arrat_vector(4, vector(3, 1));

//打印

for (int i = 0; i != arrat_vector.size(); i++)

{

for (int j = 0; j != arrat_vector[0].size(); j++) {

cout << arrat_vector[i][j] << " ";

}

cout << endl;

}

//释放,vector会自动释放,只要不是用malloc和new定义的vector,都不用手动释放

Copyright © 2088 世界杯举办国家_世界杯中 - zbtysj.com All Rights Reserved.
友情链接