最近需要写一个接口,函数每执行一次,需要存储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<vector<int>> arrat_vector(4, vector<int>(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,都不用手动释放