如何使用C语言动态定义动态数组长度
问题
在写程序时有时候需要定义一个长度为n的数组,但n是一个变量
在C语言中一定不可以这样写:
#include <stdio.h>
int main ()
{
int n;
scanf("%d",&n);
int num[n];
}
C语言中无法动态定义一个数组长度[^1]
解决思路
- 可以向计算机申请一个长度为n的内存代码如下
- 一维动态数组的创建:
1. 使用malloc
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int n;
int *p;
scanf("%d",n);
p=(int *)malloc(n*sizeof(int))
for(i=0;i<n;i++){
printf("%d",p[i]);
}
return 0;
}
2. 使用calloc
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int n1;
int *array;
printf("请输入一维数组的长度:");
scanf("%d",&n1);
array=(int *)calloc(n1,sizeof(int));
for(int i=0;i<n1;i++){
printf("%d",array[i]);
}
printf("\n");
for(int i=0;i<n1;i++){
array[i]=i+1;
printf("%d",array[i]);
}
free(array);//释放指针
return 0;
}
运行结果截图:
二维动态数组的创建:
因为二维数组的本质是数组的数组所以由上可以类推下去给外层中的每一个内层数组动态申请内存即可[^2]
C语言代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n1,n2;
printf("请输入二维数组第一个维度:");
scanf("%d",&n1);
printf("请输入二维数组第二个维度:");
scanf("%d",&n2);
int **p=(int **)calloc(n1,sizeof(int));
for(int i=0;i<n1;i++){
p[i]=(int *)calloc(n2,sizeof(int));
}
for(int i=0;i<n1;i++){
for(int j=0;j<n2;j++){
p[i][j]=i*n2+j+1;
printf("%d\t",p[i][j]);
}
printf("\n");
}
for(int i=0;i<n1;i++){
free(p[i]);
}
free(p);
return 0;
}
运行结果截图:
多维动态数组的创建:
对于多维数组的创建,其实也是一个道理,在每个维度创建即可。
1580358327837)]
多维动态数组的创建:
对于多维数组的创建,其实也是一个道理,在每个维度创建即可。
大家可以关注下我的b站,之后我会在上面直播相关教学,大家可以来点波关注一起学习,共同进步。