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

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

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

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

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

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

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

相关文章

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

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

  • 9.构造器与垃圾收集器

    堆(heap)——对象、对象的实例变量在堆上栈(stack)——方法调用和局部变量在栈上 实例变量:实例变量是被声...

  • 深入 Block 的内存问题

    一些关键点: ``` block 是在栈上创建的 block 可以复制到堆上 Block会捕获栈上的变量(或指针)...

  • foreach 引发的值类型与引用类型思考

    用都知道的一句话概括:“引用类型在堆上,栈上只保存引用;值类型即可存放于栈上也可存放于堆上,值类型变量直接存储值本...

  • 十个关于指针的一些问题解答(面试必备)

    一、堆和栈上的指针 1.指针所指向的这块内存是在哪里分配的,在堆上称为堆上的指针,在栈上为栈上的指针. 2.在堆上...

  • self循环引用相关(Zen and the Art of th

    一些关键点: block 是在栈上创建的block 可以复制到堆上Block会捕获栈上的变量(或指针),将其复制为...

  • golang中的内存逃逸

    关于golang的变量是定义在堆上还是栈上,官方的解释如下 How do I know whether a var...

  • 计算机32和64位数解析

    今天看数组结构,想起来数组的内存连续数据块。 在java在中,在栈上生成,在堆上开辟的内存空间。 简单探究下数据在...

  • iOS面试(2)

    1、内存中的栈和堆的区别是什么?那些数据在栈上,哪些在堆上?#define和const定义的变量,有什么区别什么情...

  • Java数组类型

    数组类型和数组引用变量详解 数组类型为什么要用数组?Java数组的两大特征:定义数组时,不能指定数组的长度变量分为...

网友评论

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

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