在聲明靜態數組,你必須使用一個恆定值,如文字或常量變量。您可以使用#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