給數組動態分配內存或者初始化,是因爲我們不知道要分配多少個數
1,c語言中動態的分配二維數組
使用malloc()、free()函數進行動態分配,這兩個函數包含於stdlib.h或malloc.h中
假如要申請一個3行5列的二維數組內存
#include <stdlib.h>
int main()
{
// 爲二維數組分配3行
int **a = (int **)malloc(3 * sizeof(int *)); //注意這裏面是int*
// 爲每行分配5列
for(int i = 0; i < 3; i++)
{
a[i] = (int *)malloc(5 * sizeof(int)); //這裏面的只是int
}
return 0;
}
釋放內存:
1 // 先釋放每列
2 for(int i = 0; i < 3; i++)
3 free(a[i]);
4 // 再釋放每行
5 free(a);
6 a = NULL; // 賦空
以上轉自:https://www.cnblogs.com/0xWitch/p/9314621.html
2,下面是c++中動態分配二維數組:
一直對二維數組 動態分配問題比較模糊,今天來終結一下。
我們一般使用二維數組可以直接定義如下:
#include<iostream>
using namespace std;
int main()
{
int array[5][5];
}
但是有時候我們不知道數組的維數,C++不允許直接用變量作爲維數,所以就要用到動態分配。我們先看看如何動態申請一個一維數組。
int* array=new int[10];
上述兩行代碼的意思就是用new申請 10個 int 類型的空間,然後返回這段空間的首地址,將這個地址賦給array。array是一個指向int 型的指針,且指向那塊申請的空間。
申請二維數組需要對指針的理解比較透徹,代碼如下:
int row=3;
int col=5;
int** array=new int* [row]; //先申請一個一維數組
//再接着循環在數組裏面申請數組
for(int i=0;i<row;i++)
{
array[i]=new int[col];
}
第3行先申請int* 型數組的的空間,該空間存放的是int*型的指針變量,然後把這塊指針變量的空間首地址賦給array,
然後再給int* 類型的指針分別分配空間即可,如下圖:
關於二維數組的釋放:
動態分配的內存需要我們手動釋放,代碼如下:
for(int i=0; i<row; i++)
{
//先將數組裏面的每一個數組的空間釋放點
delete[] array[i];
}
//再釋放整個數組
delete[] array;
很簡單就不再多講了。
以上內容裝載自:https://blog.csdn.net/c12345423/article/details/53056116
整個完整的代碼如下所示:
#include <iostream>
int main(void)
{
//動態分配二維數組的辦法
int **p = NULL; //這裏申請一個3x4的二維數組
p = new int *[3]; //分配一維指針,分配三個int* 類型的一維指針。
for (int i = 0;i < 3; ++i)
{
p[i] = new int[4];
}
//初始化二維數組
for (int i = 0; i < 3; ++i)
{
for(int j = 0; j < 4 ; ++j)
{
p[i][j] = i*j;
std::cout<<p[i][j]<<" ";
}
std::cout<<std::endl;
}
//釋放二維數組
for (int i = 0;i < 3;++i) //釋放
{
delete [] p[i];
}
delete [] p;
system("pause");
return 0;
}