声明静态数组时,必须使用常量值,例如字面量或常量变量。#define
如果您只是想让代码更具可读性和更易于管理,则可以使用关键字为文字指定名称,或声明和初始化常量变量:
#define NUM_ARGS 5
/*...*/
byte arg_listB[NUM_ARGS];
但是,为了使用表达式来设置数组的大小,您必须使用指针创建一个动态数组。如何完成取决于您使用的语言。在 C 中,您可以使用该calloc
函数来创建数组,如下所示:
#include <stdlib.h> //required for calloc
/*...*/
int num_args = 5;
byte* arg_listB = (byte*)calloc(2*num_args+10, sizeof(byte));
这将动态创建一个数组大小的内存块,并将第一个字节的地址分配给您的指针。需要注意的一点是,它会calloc
自动将数组中的元素初始化为 0,因此该部分已经为您完成了。当然,您还需要记住在完成数组后清理分配的内存,如下所示:
free(arg_listB);
从技术上讲,如果包含<cstdlib>
标头,则可以在 C++ 中使用这些函数。但是,C++ 对于动态内存分配有自己的特殊关键字: new
和delete
. 这些可以像这样使用:
/*...*/
int num_args = 5;
byte* arg_listB = new byte[2*num_args+10];
//initialize your array
//free the memory when done with the array
delete[] arg_listB;
如评论中所述,您需要在声明数组后对其进行初始化,并且在完成后不要忘记释放内存。由于内存管理和动态数组的内容比这里要多得多,我强烈建议您研究一下。这里有几篇文章可能会有所帮助:
C:
数组,
动态内存
C++:动态内存