C语言不能通过定义一个变量通过输入来动态分配数组,如下代码:
int n,array[n];
scanf("%d",&n);
但是在一些实际问题中无法提前知道所需要的数组长度,需要动态分配数组,可以通过molloc函数来实现动态分配数组,如下代码:
int length, *array;
scanf("%d", &length);
array = (int*) malloc (length * sizeof(int));
for(int i = 0; i < length; i++)
{
scanf("%d", &array[i]);
}
二维数组同理(利用二重指针),下为动态分配二维数组代码:
#include<stdio.h>
int main()
{
int length, width, ** array;
scanf_s("%d %d", &length, &width);
array = (int**)malloc(length * sizeof(int*));
for (int i = 0; i < length; i++)
{
array[i] = malloc(width * sizeof(int));
for(int j=0; j<width; j++)
scanf_s("%d", &array[i][j]);
}
for (int i = 0; i < length; i++)//验证array数组
{
for (int j = 0; j < width; j++)
printf("\t%d", array[i][j]);
printf("\n");
}
}
多维数组都可利用此方法来动态分配,但是二维以上的数组应该尽可能少的使用,避免混乱。
此方法优点:自然是达到了目的–动态分配数组,无需提前设定一个较大的数组长度来满足使用;缺点:造成了性能上的损耗。
水平有限,如有错误之处请谅解,若有更好的方法或者文中有错误之处,请在下面指正。