不要逐个限制我的数组索引...
而是使用循环来访问它们。
int limit=10, data_1[10], data_2[10], data_3[10];
是否可以使用limit
的值来限制这些数据的索引? 当我使用data_1 [limit]
时,我的代码会出现错误"需要常量表达式"
在C++中有没有其他方法可以使用另一个变量来限制这些数组的索引?
Here you go:
const int limit = 10;
int data_1[limit], data_2[limit], data_3[limit];
limit
必须是一个常量。
编辑:
正如其他答案所提到的,limit
也可以通过预处理步骤来定义,如下所示:
#define LIMIT 10 // Usually preprocessor-defined variables are in all caps
#define LIMIT 10
const int
const int LIMIT = 10;
int data_1[LIMIT], data_2[LIMIT], data_3[LIMIT];
你也可以在堆上分配内存(使用malloc()
),但是这样你还必须调用free()
。
int *data = (int *) malloc(limit * sizeof(int)); /* as an example */
/* Do something, check that malloc succeeded */
free(data); /* free the memory */
int limit = 10;
std::vector<int> data_1(limit), data_2(limit), data_3(limit);
#define LIMIT 10
或者
const int LIMIT = 10;
适用于C和C++
#define LIMIT 10
int data[LIMIT];
只是为了纯粹的C++
const int LIMIT = 10;
int data[LIMIT];
看到有很多答案建议使用 #define
,并且问题标记为 C++
,我认为应该提到,使用 #define
有缺点,特别是编译器不知道 LIMIT
是什么,因为每个出现都在预处理阶段被删除并替换为值。因此,在调试时,您可能会收到引用该值(即本例中的10
)但没有提到 LIMIT
的错误消息,因为它从未进入符号表。
因此,您应该优先使用
const int Limit = 10;
int data[Limit];
而不是
#define LIMIT 10
如果有机会的话(即如果您在C++中而不是在C中)。
正如前面提到的,使用std::vector
会更简单,并且会消除这种常数表达式的需要。