c++ 数组大小必须在编译时确定? 请教

“数组大小必须在编译时确定”这句话对吗??
我感觉不对,可以用new运算符在运行时动态分配(数组大小是个变量)
请大家解答下 我是菜鸟 不大清楚

数组大小必须在编译时确定
这句话是对的。

动态数组实际上并不是一个严格意义上的数组,
它是先声明一个指针,再以它只想一个后来分配的连续存储空间。
这个实际上是一个连续存储的链表的实现。

所以就严格的数组的概念来说的话,
数组大小必须在编译时确定,
这句话是对的。
温馨提示:内容为网友见解,仅供参考
第1个回答  2016-12-25
不一定的啊。

如果是动态分配的数组就可以在运行的时候再确定大小。
比如

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
int size,inx;
cout<<"input mem size:"<<endl;
cin>>size;
int *p = new int[size];
memset(p,0x00, sizeof(int) * size);
for (inx=0; inx!=size; ++inx) p[inx]= inx+1;
for (inx=0; inx!=size; ++inx) cout<<p[inx]<<"\t"<<endl;
return 0;
}
第2个回答  2009-03-10
数组大小必须在编译时确定
这句话是对的。

用new分配的内存是给指针分配内存,那其实不是数组,看编译后的中间代码就知道,那跟数组的处理完全不一样。
int a[5];这是一个数组,你是无法用new给它增加内存空间的。
第3个回答  2009-03-10
你说的对,既可以在用new的时候动态分配,
也可以在定义的时候初始化分配。
编译的时候不一定要定好数组的大小。
但是,如果不是用new来分配数组,
那数组的大小就一定要是固定常量,
即使是初始化赋了常量值的变量
也不可以作为数组长度的参数。
第4个回答  2020-02-04
可以用vector来实现
在头文件里包含
#include
声明变量是
vector
a;
例如
vector
a;
然后可以用a.pushback(100);这样读入数据。
要用这个数据的时候直接a[0],a[1]这样输入下标就可以了

c++ 数组大小必须在编译时确定? 请教
数组大小必须在编译时确定 这句话是对的。动态数组实际上并不是一个严格意义上的数组,它是先声明一个指针,再以它只想一个后来分配的连续存储空间。这个实际上是一个连续存储的链表的实现。所以就严格的数组的概念来说的话,数组大小必须在编译时确定,这句话是对的。

C++ 使用变量声明数组长度
C++中无法使用变量作为数组长度,必须使用常量。原因在于数组空间分配在栈内存中,这部分空间大小必须在编译时就确定,不能等到运行时再分配。常量值在编译时就确定,而变量须运行时才能确定。因此,若要使用变量声明数组长度,可以选择将数组空间开辟在堆内存中。采用这种方法,虽然灵活性增强,但在内存管理...

c语言中什么时候数组不必定义大小,直接用[]表示。 麻烦告诉下,谢谢...
C\/C++中使用数据都必须要在定义的时候确定大小。直接用[]的情况是在声明数组时就初始化该数组,例子如下:int a[] = {1,2,3,4,5,6,7,8};这种直接使用[]是因为在直接声明赋初值时,初始值确定了数据的大小,如上例数组大小为8.外还有一种是将数组作为参数传给函数,实际那是传的指针,如下...

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

c++几个简单的问题,大虾帮帮哦
这个数组的大小值,必须能在编译时确定,而s是在运行时才确定的,所以不可以。但是像java这样的语言是可以的。4.我不知道你的为什么循环0次,我自己的机器上循环了5次。5。编译器在编译代码时,会直接将define的内容替换掉,你的第4行就成了cout << 123;你能看出问题所在了么?

C++数组初始化时必须指定数组的大小吗?
A选项:必须在主调函数中说明此数组的大小,不一定例如传递一个char类型的字符串,就不需要。所以A是错的。B选项:实参数组类型与形参数组类型可以不匹配。实参和形参,类型顺序必须一致,不然调用不了。B错 C选项:在被调用函数中,不需要考虑形参数组的大小。因为传数组都是只传一个地址过来,而如果...

c语言中数组的大小可以改变吗
数组大小一旦确定就不能改变。数组长度必须在编译时确定,可以使用malloc函数在程序运行时动态分配所需“数组”长度。定义数组需要指定数组的长度,然后系统会根据这个长度分配固定的内存大小。当出现intarray[10];这种情况的时候,是不可以变的,这时候变量的存储空间在栈区。当intn;cin>>n;intarray=...

c++二维数组大小有限制吗?怎么解决?
数组没有限制,但你是数组是临时变量,使用的是栈,而栈的大小是在编译时就已经确定了的,不宜大量使用。你应该使用new的方式,自这样就没有限制了,你可以去网上搜索一下堆和栈的确别。=== 你调试一下,看看是什么地方导致崩溃的。

C++除了new 外还有什么扩大数组范围的方法
new 不是扩大数组, 而是动态分配, 即是在运行时才确定数组大小,像int a[2] 是在运行前确定数组大小。想要声明数据量比较大的数值, 可以自己定义一个数据结构的 在数据结构内部分别在需要时再创建数组,然后用一定得算法把多个数组连接起来 在重组各种一般数组的运算符,比如[] *等 在使用的...

c\/c++中数组定义的问题!!劳烦高手帮忙看一下,谢啦
在栈上分配的数组的大小必须是个常数,如:GLfloat c[100];在堆上分配的数组,大小可以是个变量,如:int n = 100;GLfloat* c = (GLfloat*)malloc(n*sizeof(GLfloat));通常,数组大小在程序运行时才能确定的,必须使用后者。但是也可以用第一种方法,建一个很大数组,保证总是够用,显然这样...

相似回答