定义数组时为什么不能用含有变量的表达式
2018-01-22 20:32
246 查看
在栈上创建数组时,不能使用含有变量的表达式,如:int a[x+2];错误
原因:在栈上创建数组时编译器编译的时候就需要在栈上分配内存,可是有了变量以后,编译器就无法知道该分配多大的内存空间,故编译器会报错。但是定义一般变量如:int a;编译器会自动识别 int
占多大内存分配给他。
对比:如果是动态创建数组时(也就是在堆上创建数组时)可以出现变量如:new a【x+1】;正确;
原因:在堆上创建数组时,编译器不会在编译的时候为它分配内存,而是在程序运行的时候为它分配内存,我们可以知道,程序运行时变量的值就会明确是多少,故动态创建数组时可以出现变量;
原因:在栈上创建数组时编译器编译的时候就需要在栈上分配内存,可是有了变量以后,编译器就无法知道该分配多大的内存空间,故编译器会报错。但是定义一般变量如:int a;编译器会自动识别 int
占多大内存分配给他。
对比:如果是动态创建数组时(也就是在堆上创建数组时)可以出现变量如:new a【x+1】;正确;
原因:在堆上创建数组时,编译器不会在编译的时候为它分配内存,而是在程序运行的时候为它分配内存,我们可以知道,程序运行时变量的值就会明确是多少,故动态创建数组时可以出现变量;
相关文章推荐
- 大数组定义在main函数中不能执行,为什么将其定义为全局变量就可以执行?
- 这个程序中为什么出错???为什么不能把nl,nr定义为全局变量,求大神指教
- 宏定义函数指针类型&函数返回左值类值 1。宏定义不分配内存,变量定义分配内存。 2。宏名和参数的括号间不能有空格 3。宏替换只作替换,不做计算,不做表达式求解 //下面是正确的标准的写法 typedef int(FUNC1)(int in); ty
- 为什么接口中不能定义变量
- PLSQL 定义含有多个字段的数组类型变量
- 为什么接口中不能定义变量
- 头文件中只能声明变量不能定义变量 而声明变量必须带extern,为什么头文件中变量的声明都没有加
- 为什么.h文件中不能定义全局变量
- JAVA成员变量为什么不能在类体中先定义后赋值
- 为什么在函数中不能通过指针返回本地定义的变量
- 关于为什么不能在头文件中包含变量定义的解释
- java为什么定义的变量在main中不能用?
- [C语言]除非该数组为全局变量,否则只能在定义数组时获取数组长度,在传递过程中只是传递指针不能再次获取长度
- 头文件、声明、定义以及条件编译为什么不能定义变量的个人理解
- 为什么用const说明的常量不能用来定义一个数组的初始大小?
- #define const为什么不能用定义的量做位宽跟定义数组长度?
- 为什么定义一个过大的数组或容器,应当把它把它定义为全局变量为宜?
- 循环中的变量为什么不能定义为浮点型
- 你不知道的c语言之为什么数组的大小不能是变量
- 为什么接口中不能定义变量(oop设计原理)