2011-08-15 68 views
0

我正在嘗試做如何在運行時指定數組?

基本上,我已經得到了我定義與宏幾種可能的排列:

#define ARRAY_ONE {0, 2, 7, 8} 
#define ARRAY_TWO {3, 6, 9, 2} 
#define ARRAY_THREE {3, 6, 4, 5} 
//etc... 

在運行時,我有被中使用的C-陣列很多地方在某個班級。我想這個陣列使用的#define值之一,即:

int components[4]; 

if (caseOne) 
{ 
    components = ARRAY_ONE; 
} 
else if (caseTwo) 
{ 
    components = ARRAY_TWO; 
} 
else if (caseThree) 
{ 
    //etc... 
} 

-

的問題

然而,上面的代碼不起作用。相反,我得到一個奇怪的錯誤

Expected expression before '[' token 

會有人心中解釋這是怎麼回事,我怎麼能做到什麼,我試圖?任何幫助將不勝感激 - 謝謝!

回答

4

我不認爲C數組可以在聲明後使用花括號語法進行初始化。你只能在聲明它們時初始化它們。

嘗試用調整以前發佈的答案:

const int ARRAY_ONE[] = {0, 2, 7, 8}; 
const int ARRAY_TWO[] = {3, 6, 9, 2}; 
const int ARRAY_THREE[] = {3, 6, 4, 5}; 

int *components; 
if (case1) { 
    components = ARRAY_ONE; 
} else if (case2) { 
    components = ARRAY_TWO; 
} else if (case3) { 
    components = ARRAY_THREE; 
} 
+0

這完全正確。我能想到的最明顯的解決方案是使用'memcpy'將所需的數組複製到組件中。 – Tommy

+0

啊!我明白了以前的答案,現在想說的是,在我的情況下,使用上面的指針似乎是一個很好的解決方案。謝謝! –

+0

更確切地說,C中的變量除聲明時外無法初始化。之後,您只需簡單地分配它們,而不能分配C數組。 – Chuck

0

我真的無法弄清楚錯誤是什麼。我懷疑它可能來自您未發佈的某些代碼。是否說錯誤在int components[4];行?

會這樣嗎?我使用常量而不是定義。

const int ARRAY_ONE[] = {0, 2, 7, 8}; 
const int ARRAY_TWO[] = {3, 6, 9, 2}; 
const int ARRAY_THREE[] = {3, 6, 4, 5}; 

int* components = ARRAY_ONE; 

int whatever = components[2]; 
+0

感謝您的答覆!錯誤出現在components = ARRAY行上。你的方法似乎沒有考慮到組件可能是數組一,二,三的事實 - 這是我遇到麻煩的地方。 –

0

嘗試:

INT ARRAY_ONE [] = {0,2,7,8};

int ARRAY_TWO [] = {3,6,9,2};

int ARRAY_THREE [] = {3,6,4,5};

int components [4];

int count = sizeof(components)/ 4 //這將獲得數組的長度,或者你可以把數組長度;

如果(情形)

for (int i =0; i< count; i++) 
     components[i] = ARRAY_ONE[i]; 

否則,如果(情形2)

for (int i =0; i< count; i++) 
     components[i] = ARRAY_TWO[i]; 
相關問題