C语⾔编程技巧:⼿把⼿教你学可变长度数组的创建及使⽤⽅法
C语⾔编程技巧:⼿把⼿教你学可变长度数组的创建及使⽤⽅法
问题提出
在C语⾔编程中,对于普通数组的定义,如定义⼀个包含10个int类型元素的⼀维数组a,我们采⽤下⾯的⽅式:
int a[10];
这种⽅式定义的数组是静态数组,其特点是定义⽅便,⽆需管理其内存的占⽤情况,但其缺点是⼀旦定义后,其数组的长度就固定了,⽽不能动态的改变其⼤⼩。
但是,在很多情况下,数组元素的个数我们是⽆法事先确定的。如定义⼀个数组,⽤来存储给定的已知数组中所有⼤于3的元素,很明显,这个数组的⼤⼩是不确定的,⽤静态数组的定义⽅式是不合适的,除⾮你定义的数组⼤⼩⾜够⼤,能包括⾜够多的元素,但这样会造成内存的浪费。所以,这种场合下动态数组就派上⽤场了。
在C语⾔中提供了诸如内存的申请、释放等管理函数,然后结合指针可以按需动态地分配内存空间,来构建动态数组,达到有效利⽤计算机内存资源的⼿段。
基本函数说明
C语⾔中⽤于动态数组操作的函数主要包括malloc、calloc、realloc和free等,每个函数的原型、参数意义及功能说明如下表所⽰:
下⾯通过⼀个例⼦演⽰动态数组的创建及使⽤⽅法。
例⼦说明
编写⼀个控制台程序,能够创建包含n个元素的动态数组,其n值由⽤户输⼊,数组⾥⾯存储的内容是n个0-9之间的随机数。可以通过输⼊不同的n值反复创建不同个数的动态数组,当n值输⼊⼩于等于0的
数值时,程序退出。
C语⾔实现代码
完整的C语⾔实现代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void main(void){
int i =0;
int n =0;//动态数组的元素个数
int* p =NULL;//申请的内存地址指针
do{
printf("请输⼊元素个数(0----退出):");
scanf("%d",&n);
p =(int*)malloc(n *sizeof(int));//分配内存空间
//产⽣n个0-9之间的随机数
for(i=0;i<n;i++){
p[i]=rand()%10;
c语言如何创建字符串数组}
//打印所有的随机数
for(i=0;i<n;i++){
printf("%d\t",p[i]);
}
printf("\n");
//释放内存空间
if(p!=NULL){
free(p);
p =NULL;
}
}while(n>0);
}
代码简要解释如下:
第9⾏,定义⼀个指向int型的指针p,其对应的内存空间⽤以存储动态数组的元素。
第13-14⾏,输⼊动态数组的元素个数,存储到变量n中。
第16⾏,使⽤malloc函数申请能包含n个元素(n*4个字节)的地址空间,将返回的void型指针强制转换为指向int型的指针赋予p。第19-22⾏,为动态数组中的每个元素赋值(0-9之间的随机数)。
第25-29⾏,在控制台上打印动态数组中的每个元素。
第31-36⾏,使⽤free函数释放动态内存。
程序运⾏结果如下图所⽰:
总结
C语⾔中关于动态数组的编程,需要注意的是,在动态数组使⽤完毕后,不要忘记使⽤free函数将动态申请的内存释放,否则会造成内存泄露。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。