C++中数组的定义

来源:百度知道 编辑:UC知道 时间:2024/09/21 01:33:41
为什么书上写说
……
int n=10;
int a[n];
…… 是非法的
但是我却见到 ……int n=1;
int a[n*1+12] ;是合法的呢?

首先告诉你
……
int n=1;
int a[n*1+12] ;

是不合法的
如果你想动态的分配空间
而不是一开始就定死了

你可以用new来实现动态分配

int *a;
int n=10;
a=new int[10];
这样a就是一个有10个int空间大小的数组了

这个定义完全合法,只要定义为const,而且是广泛推荐的做法,因为它可以保证你每次调用数组的时候长度的一致性,避免因为手误而输入错误的下标。你再检查一下书吧。

new可以使用动态的分配 , 这么个方法你大概也知道

你上面说的那个 人家定义的时候int大概是const的吧,
const int n=1 ;
这样的话就是可以的哦,只要是常量,那么编译就能通过

明白??

int n=10;
int a[n];
…… 是非法的
因为一维数组的定义方式为:
类型说明符 数组名 [常量表达式];
常量表达式中不能出现变量,否则就不是常量表达式

C99支持动态数组,其实也就是在定义时可用变量指定大小(就像你代码中写的那样),运行期间好像不能改变。
但符合这个最新规范的编译器并不多见,devcpp算一个,在老古董VC6里肯定行不通!
其实即使不在语法上支持这点,也可以用alloc()动态分配栈空间来实现之,离开作用域后申请的栈空间会自动释放。

C99才支持变长数组.

你可以定义为const型

const int n = 10;

int a[n];