2013-07-14 41 views
0

實際上,我想知道如何將數組值用於其他數組的大小聲明。我有這樣的測試代碼:使用數組中的值聲明另一個數組的大小

main(){ 

int sz[3]={1,2,3}; 

int track1[ sz[0] ]={111}; 
int track2[ sz[1] ]={222,222}; 
int track3[ sz[2] ]={333,333,333}; 

printf("%d %d %d\n", track1[0],track2[1],track3[2]); 

} 

這些都是警告和錯誤,我得到:

test2.c: In function ‘main’: 
test2.c:4: error: variable-sized object may not be initialized 
test2.c:4: warning: excess elements in array initializer 
test2.c:4: warning: (near initialization for ‘track1’) 
test2.c:5: error: variable-sized object may not be initialized 
test2.c:5: warning: excess elements in array initializer 
test2.c:5: warning: (near initialization for ‘track2’) 
test2.c:5: warning: excess elements in array initializer 
test2.c:5: warning: (near initialization for ‘track2’) 
test2.c:6: error: variable-sized object may not be initialized 
test2.c:6: warning: excess elements in array initializer 
test2.c:6: warning: (near initialization for ‘track3’) 
test2.c:6: warning: excess elements in array initializer 
test2.c:6: warning: (near initialization for ‘track3’) 
test2.c:6: warning: excess elements in array initializer 
test2.c:6: warning: (near initialization for ‘track3’) 
test2.c:8: warning: incompatible implicit declaration of built-in function ‘printf’ 

這裏有什麼問題,ovarall這是甚至可能的,什麼我沒試過嗎?

+0

你正在編譯爲C或C++嗎? –

+0

請參閱:http://stackoverflow.com/questions/3082914/c-compile-error-variable-sized-object-may-not-be-initialized對於類似的問題。 – lsk

回答

2

當你有一個初始化程序時,你實際上不可能有可變數量的元素。只需將其忽略並讓編譯器計算值的數量即可。

int track1[]={111}; 
int track2[]={222,222}; 
int track3[]={333,333,333}; 

如果沒有初始值設定,代碼將用C工作(使用C99可變長度數組)和C++通過添加constexpr關鍵字的sz聲明。

+0

我試過使用const int sz [],它沒有工作......然後我看到了你的指針constexpr。謝謝。 – lsk

1

本已經回答了靜態數組問題。另一種可能性是使用動態分配的數組。例如

int *track1 = (int *)allocate_int_array(sz[0]); 
int *track2 = (int *)allocate_int_array(sz[1]); 
int *track3 = (int *)allocate_int_array(sz[2]); 

這將使您的從SZ []讀出軌道*數組大小以及使用TRACK1,2和3點的指針如在代碼的其餘部分的陣列的選項。當然,免費和其他malloc坑口適用。

相關問題