在声明静态数组,你必须使用一个恒定值,如文字或常量变量。您可以使用#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);
从技术上讲,你可以用C中使用这些函数++如果包括<cstdlib>
头。然而,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: Arrays, Dynamic Memory
C++:Dynamic Memory
在C++中,通过利用诸如'std :: array'和更相关的'std :: vector'之类的东西来解决这个问题。在C(至少C99)中,可以使用VLA作为该语言的一部分。 – chris
@chris我不认为'std :: array'会解决它......但是'std :: vector'肯定会! – oldrinb
@oldrinb,我在'std :: vector'的建议中几乎总是包含'std :: array'。前者是固定大小数组的好替代品。 – chris