前言
定义数组大小时,以下的形式中:
不合法形式:
int n;
cin>>n;
int a[i];//数组的大小为常量,上方的n为变量
合法形式:
const int n=10;
int a[n];
但这样子定义数组的空间大小的鸡肋之处在于它是静态的,如果遇上动态内存要求的题目,这样子就不可以了,只能定义一个足够大空间的数组来存放要求数据。
int a[1000]
那么如何动态分配数组内存呢?就要用到malloc
函数
一、malloc
在内存中找一片指定大小的空间,然后将这个空间的首地址范围给一个指针变量,这里的指针变量可以是一个单独的指针,也可以是一个数组的首地址,这要看malloc()函数中参数size的具体内容。
二、内存申请
1.一维数组
int *getarray(int* nums,int numsSize, int *returnSize)
{
int *ret=(int *)malloc(sizeof(int)*x)//malloc 函数返回的是 void * 类型,要强制型转换
*returnSize=x //解引用来得知需要返回的数组的长度
return ret //返回申请内存的数组首地址
}
2.二维数组
//r为行,c为列
int **getarray(int r,int c,int* returnSize,int** returnColumnSize)
{
int i;
int** ret=(int **)malloc(sizeof(int *)*r);
*returnColumnSize=(int*)malloc(sizeof(int)*r);
*returnSize=r;
for(int i=0;i<r;i++){
ret[i]=(int* )malloc(sizeof(int)*c);
(*returnColumSize)[i]=c;
}
return ret;
}