美文网首页
在栈上为什么不能用变量做数组的长度,堆上可以吗

在栈上为什么不能用变量做数组的长度,堆上可以吗

作者: 萧何爱英语 | 来源:发表于2018-07-25 16:58 被阅读0次

    在栈上创建数组时,不能使用含有变量的表达式,如:int a[x+2];错误

    原因:在栈上创建数组时编译器编译的时候就需要在栈上分配内存,可是有了变量以后,编译器就无法知道该分配多大的内存空间,故编译器会报错。但是定义一般变量如:int a;编译器会自动识别 int 占多大内存分配给他。

    对比:如果是动态创建数组时(也就是在堆上创建数组时)可以出现变量如:new a [x+1];正确;
    原因:在堆上创建数组时,编译器不会在编译的时候为它分配内存,而是在程序运行的时候为它分配内存,我们可以知道,程序运行时变量的值就会明确是多少,故动态创建数组时可以出现变量;

    堆里的是动态数组,是程序运行过程中动态加载的,而栈不一样,申请数组必须要是确定大小的的数字,在编译时就要确定下来,如果你const int x=7就不会报错

    相关文章

      网友评论

          本文标题:在栈上为什么不能用变量做数组的长度,堆上可以吗

          本文链接:https://www.haomeiwen.com/subject/gyfmmftx.html