提出问题
请问在c语言里如何实现动态大小的数组啊,比如说int a[N];
,这里N的值可以在程序中定,或者有什么方法可以实现类似的功能?总之只要在编译时不用制定数组大小就行。
分析问题
嵌入式系统的内存是宝贵的,内存是否高效率的使用,往往意味着嵌入式设备的高质量和高性能,有时我们所需的内存空间无法预先确定,这里使用静态数组的办法很难解决,所以高效的使用内存对我们来说是很重要的。
所以我们在自己编写C语言代码的时候,就应该学会使用动态数组,那么怎么实现呢?
静态数组与动态数组的区别
对于静态数组,一旦定义了,数组长度也就指定好了,系统将为它分配一个固定大小的空间,使用完无需释放,引用简单,但是创建后无法改变其大小,这在应用中是一个致命弱点!
对于动态数组,它可以随程序需要而重新指定大小,其创建麻烦,使用完必须由程序员自己释放,否则将会引起内存泄露。但其使用非常灵活,能根据程序需要动态分配大小。所以相对于静态数组的来说我们对于使用动态数组有很大的自由度。
动态数组的内存空间是从堆上分配的,通过执行代码而为其分配存储空间。当程序执行到这些语句时,才为其分配,程序员自己负责释放内存。
在创建动态数组的过程中要遵循以下原则:
-
在创建的时候从外层往里层,逐层创建;
-
在释放的时候从里层往外层,逐层释放。
如何创建动态数组?
下面是一个创建动态数组的例子,按照需求设置数组大小:
#include
#include
int main(){
int arrLen;
int *array;
int i;
printf("please enter length:");
scanf_s("%d", &arrLen);
array = (int*)malloc( arrLen*sizeof(int) );
if(!array){
printf("create error!\n");
exit(1);
}
for(i=0; i array[i] = i 1;
}
for(i=0; i printf("%d ", array[i]);
}
printf("\n");
free(array);
system("pause");
return 0;
}
运行结果:
使用内存中的数据
上面的代码中,我们通过下标array[i]
来引用数组元素,这个静态数组没有什么区别。另外还可以通过指针来引用数组元素,对上面的程序稍作修改:
#include
#include
int main(){
int arrLen;
int *array;
int *arrayCopy;//用来指向具体的数组元素
int i;
printf("please enter length:");
scanf_s("%d", &arrLen);
arrayCopy = array = (int*)malloc( arrLen*sizeof(int) );
if(!array){
printf("create error!\n");
exit(1);
}
for(i=0; i *arrayCopy = i 1;
}
arrayCopy = array;//重置到数组首地址
for(i=0; i printf("%d ", *arrayCopy );
}
printf("\n");
free(array);
system("pause");
return 0;
}
需要注意的是,free() 函数必须释放整块内存,多定义一个变量 arrayCopy,不断改变它的值,以指向不同的数组元素。这样可以保证 array 变量的值不变,始终指向内存首地址,用于free()整块内存。
当然也可以动态创建多维数组,其原理都是一样的,并且需要遵循创建与释放的原则。
声明:
本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。
今天的文章c语言如何实现动态数组_c++小游戏简单代码分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/78416.html