在学习完动态内存后,回顾之前所编写的关于数组的程序,很多时候的有的题都需要在函数内定义数组去使用,但是在学习动态内存之前所定义的数组是静态的,很多情况无法适用。这个笔记就是通过动态内存去实现二维数组。
以二维数组arr[3] [4]举例,一共有三个方法
1.利用指针数组
利用指针数组的主要思想就是,申请3个int*类型的指针去分别指向四个int类型的数组
如图所示:
但是,这个方法应当注意对于动态内存的释放,并不是简单地释放,而是先把申请的int数组内存释放掉,之后再对int *的指针进行释放。
而且,利用指针数组的方式还有一个特点就是,每一行元素的地址相互连续,但是不能保证上一行的尾和下一行的头挨着。
下面的程序就是使用此方法申请3x4的二维数组,并且输出其地址
int main()
{
int **p=(int**)malloc(3 * sizeof(int*));//申请int*的指针
for (int i = 0; i < 3; i++)
{
p[i]= (int*)malloc(