为什么c/c++数组初始化长度不支持变量? 不这样做有什么弊端吗? 能不

为什么c/c++数组初始化长度不支持变量?
不这样做有什么弊端吗?

能不以出错或容易出错为前提解释一下吗?

第1个回答  2016-12-08
1
第2个回答  2016-12-08
我习惯陪你悲伤

为什么在c++中定义数组时数组的常量表达式不能包含变量?
但不管是什么,都原理一样,以数组大小为例,在C++中,有些变量是在编译期间,编译器就给分配空间的,有的是运行时候才分配空间,对于编译期间就分配空间的变量,编译器一定要知道它是多少长度的,才能分配适合那个长度的空间,静态数组,临时变量,全局变量之类都是这样。你放变量在里面,当然编译期间都...

数组长度为什么不能是变量
数组的大小不能用变量表示的,是因为在编译连接期间内存要按照你制定的长度给数组分配相应的内存空间,如果是变量的话就没有办法给它分配了,你可以用符号常量来解决,在开头用:define m 100 define n 100 然后在程序中就可以定义u[m][n]二维数组了,当不一定非要是100,可以是任何一个正整数。C...

请问C++的字符串string类为什么数组中不能为变量?
因为数组在C++中是静态存在的,它占用一定的空间(也就是固定长度),在数组当前所在函数运行中是不能改变其长度的(函数结束就消失),一旦改变了长度,数组所在内存区就会出现空缺,导致出错!你在int n=5之前不添加const声明为常变量,系统将认为你“企图”在运行中修改数组长度,所以不予通过。

C++不进行中变量初始化初始化会造成什么影响?
C++不对变量初始化,可能会导致以下后果:计算结果不正确 程序逻辑与期望逻辑不一致 对于使用函数指针的程序,将导致进程崩溃。写入硬盘的数据产生错误 严重的可能导致系统甚至硬件出现故障。

c++初始化数组的问题?
2:不能在声明的同时初始化 3:不能是静态变量或用extern修饰 4:数组的类型以及长度的类型都必须支持sizeof(一般来说就是只能用内部类型)大部分支持C99的编译器都支持这个特性(VC2005之后,GCC3.2之后),这个和new出来的数组还是本质上不一样的,这个其实是程序在运行期间在进程栈区生成定长数组,...

为什么有的C++编译器里数组的大小是变量时不会出错,有的会出错.
这个的原因是有两方面:C++标准里明确规定:数组的初始化必须是常量、或者常量表达式。所以上面的代码只在一部分编译器里面能够编译通过,如:MinGW 微软的编译器是不能编译通过这个的,因为微软的编译器没有在标准的基础上进行扩展,但是MinGW编译器却扩展了数组中的初始化方式,所以如果楼主想要编译一个跨...

C语言中数组长度不能用变量定义吗?
C语言里,所有变量空间都是在程序运行之初向系统申请的,包括指针,除了一些动态申请方式如malloc函数。没有申请的空间系统是不允许读写的。那么如果一个数组大小是变量定义,则在程序运行前不能确定数组大小,也就无法申请,故不允许。所以,解决的办法便是通过malloc函数,即 int a[n];可改为 int* ...

c\/c++:数组作为参数,长度传不过去,必须另外弄个参数,好麻烦啊!!!_百度...
是这样的,传数组相当于传指向数组首元素的指针,丢失了长度信息。但这种麻烦也是有好处的:如果你真的不需要这个长度,那么提高了时间和空间效率。你也可以用STL库(几乎所有C++编译器里都有)里封装的vector模板类,这样数组长度等信息都传进去了。如何用vector——你可以试一下这个示例代码 include <...

C\/C++变量定义数组长度问题
编译都过不了。而后来的有些C++的编译器允许这样做的,但大多数用来做定义数组长度的变量要用const修饰,叫值不变变量,但纯C编译器即使用const修饰的变量也不允许用来定义数组长度。你说的“C和C++”都是允许的可能是你的编译器是C++兼容C的,时下纯C编译器已经很难遇到了……供参考。

c++类内构造函数指针初始化?
初始化与赋值虽皆使用等号,但用途不同。初始化通常用于数组的整体赋值,如 int a[2] = { 0, 1 }; 而赋值不支持此类操作。若成员变量是数组,也只能在初始化列表中进行数组初始化,如 ClassName() : member({ 0, 1 }) {}。否则,无法对数组进行列表初始化。为避免多次构造导致的时间开销,...

相似回答