为什么在c++中定义数组时数组的常量表达式不能包含变量?

我想根据输入的n值去对数组的大小作动态定义,但是这样是编译不过的?有什么办法解决啊?

你是指常量表示数组大小,还是初始值?但不管是什么,都原理一样,以数组大小为例,在C++中,有些变量是在编译期间,编译器就给分配空间的,有的是运行时候才分配空间,对于编译期间就分配空间的变量,编译器一定要知道它是多少长度的,才能分配适合那个长度的空间,静态数组,临时变量,全局变量之类都是这样。你放变量在里面,当然编译期间都不知道这个数组的大小,当然不行了。这类变量一般是在栈上分配空间,只不过不同类型变量位于栈的不同段。

有些变量是在运行期间分配空间的,这样的变量里面可以有变量,因为变量的值在运行期间可以确定,系统就知道为它分配多少空间。但一般这类变量是在堆上分配空间。
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-12-04

数组的长度在编译器要求定下来。而变量的值直到运行时在知道。

可使用动态分配数组:

int len = 0;
cin >> len;
int *arr = new int[len];

delete[] arr;//用完后别忘了delete

本回答被提问者采纳
第2个回答  2014-12-04

使用new操作符,动态申请内存。不过用完后需要用delete删除。

例子:

int N ;
cin>>N;
int *arr = new arr[N];
for(int i = 0;i<N;i++)
{
    cin>>arr[i];
}
for(int i = 0;i<N;i++)
{
    cout<<arr[i]<<" ";
}
cout<<endl;
delete []arr;

本回答被网友采纳
第3个回答  2014-12-04
我一般就是,定义一个足够大的,但是不说楼主也知道。
还有就是链表的形式用的时候在加到数组中,不知道楼主学过数据结构与算法没有

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

c++中数组的下标可以是变量吗?
1、C89\/C90标准:定义数组时下标只允许使用整型、字符型常量,引用数组时下标可以使用整型、字符型的常量或者变量 2、C99标准:定义数组时下标可以使用整型、字符型的常量或变量,但变量必须已经赋值;引用数组时下标可以使用整型、字符型的常量或者变量。以上所说的常量及变量均包含表达式。

在定义数组时,数组大小必须是常量,不能使变量或变量表达式
因此,n不是一个常量,只是一个不能通过n来修改其值的一个变量。所以不能用它来给定数组的大小。

在VC++中常量和变量有什么区别?
C++数据类型之一:常量和变量一、文字常量:常量之所以称为“文字常量”,其中“文字”是指我们只能以它的值的形式指代它,“常量”是指它的值是不可变的。同时注意一点:文字常量是不可寻址的(即我们的程序中不可能出现获取所谓常量20的存储地址&20这样的表达式),虽然常量也是存储在内存的某个地方,但是我们没有办法访问...

C 表达式必须含有常量值?
定义数组的时候, 中括号里的必须是常量, 而不能是变量, 也就是说你要么直接写一个数, 要么用#define宏定义一个符号, 而不能使用任何形式的变量(const声明的也是变量, 只不过它的值不能改变)

...studio c++二维数组定义的问题,为啥程序说表达式必须含有常量值呀...
因为在这个函数里,n是参数,作为变量处理了。你要把a改成动态分配,new或者malloc

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

c++ 用户输入 2个值 定义二维数组 但是报错
在c++中时不支持变量作为数组长度参数的,如 int n=10;byte bs[n]; 这样写会提示编译错误”表达式必须含有常量值“。虽然用变量声明数组大小会报编译错误,但是可以通过指针来动态申请空间实现动数组长度的变量赋值,写法如下:int length = 10;int * varArray;3varArray = new int[length];这样...

什么用const说明的常量不能用来定义一个数组的初始大小?
并不是所有的常量都可以用来定义一个数组的初始大小,在C程序中,只有C语言的常量表达式才能用来定义一个数组的初始大小。然而,在C++中,情况有所不同。一个常量表达式的值在程序运行期间是不变的,并且是编译程序能计算出来的一个值。在定义数组的大小时,你必须使用常量表达式,例如,你可以使用数字:...

声明数组时,数组名后是用方括号括起来的常量表达式
在C++、Java等编程语言中,声明数组时,数组名后是用方括号括起来的常量表达式。这个常量表达式被称为数组的长度,它定义了数组可以存储的元素数量。例如,在C++中,我们可以这样声明一个整数数组:intarr[10];。这里,arr是数组名,10是数组的长度,表示这个数组可以存储10个整数。同样,在Java中,我们...

相似回答