内存分配
二维数组的内存分配相当于是先给一个一维数组分配内存,再在这个一维数组里面的每一个地方再开辟一块内存
#include<stdio.h>
#include<stdlib.h>
void print2D(int** a, int row, int col)
{
for (int i = 0; i < row; i++){
for (int j = 0; j < col; j++)
printf("%d ", a[i][j]);
printf("\n");
}
}
int main()
{
//int* a = (int*)malloc(sizeof(int) * n);
//这是一维数组内存分配的代码
//(指针的类型)malloc(sizeof(指针指向的类型)*n;
//指针的类型:强制类型转换 去掉变量名——int**
//指针指向的类型:操作的数据类型 去掉变量名和*——int*
//int num = 1;//*p等效num
//int* p = #//*pp等效p *pp等效pp[0]
//int** pp = &p;
int row, col;
scanf("%d %d", &row, &col);
int** a = (int**)malloc(sizeof(int*) * row);
for (int i = 0; i < row; i++)
a[i] = (int*)malloc(sizeof(int) * col);
for (int i = 0; i < row; i++)
for (int j = 0; j < col; j++)
scanf("%d", &a[i][j]);
print2D(a, row, col);
for (int i = 0; i < row; i++)
free(a[i]);
free(a);
return 0;
}
内存释放需要反过来由内到外释放
for (int i = 0; i < row; i++)
free(a[i]);
free(a);