用变量定义数组的几个方法

当我们需要申请一个数组它的大小却是变量时,有如下解决方案。

1.通过变量直接申请数组

int a;
cin<<a;
int b[a];

这种写法无疑是最简单的,但是注意,只有比较现代的编译器支持这项功能,例如clion的minGw,Dev c++也支持这种写法。(可能是现代编译器针对它进行了特殊优化)但是这种写法存在着缺陷,即编译器应该在编译期就确定数组的大小,而不是运行期。为了安全性,vs并不支持这种写法,那么遇见了这种问题怎么解决呢?

2.运用malloc或者new动态申请一个数组

写法如下

int a;
cin<<a;
int* b;
b=(int*)malloc(a*sizeof(int))

其中malloc是一个函数,用来分配相应大小的内存,注意点有三。一是使用时需要引用#include<malloc>头文件。二是两个括号的问题,第一个括号为强制类型转换,例如此例的b,是int型的指针,所以第一个括号也的是int*,第二个括号是我们需要的动态分配的内存大小,sizeof(int)求出来的是一个int类数据的大小,我们需要a个这样大小的数组成的数组,所以a乘上它。三是动态分配的内存需要自己进行管理,malloc头文件提供了free这个函数来释放掉我们申请的内存,来防止内存爆炸,用法如下

free(b);

这样就释放了我们为b这个数组申请的内存。当只需要分配几个数组的时候不用释放,但是如果用到动态内存的地方很多的时候,就要注意内存管理了。

3.给定最大值

假设数据量最大为10000,写法如下

int a[10000]
/*或者*/
#define MaxSize 10000//写在主函数之前,using下面,是宏定义
int a[Maxsize];

好处也是好写,坏处是会浪费大量空间,实际开发时会导致内存爆炸,不过由于是静态的,在我们写算法题的时候很好用。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值