2014-02-18 16 views

回答

6

你不能。實際上,array10[n];不是合法的C++(即使n已初始化)。可變長度數組不是C++功能。

使用std::vector

cin >> n; 
std::vector<int> vec(n); 
cin >> vec[i]; 
+0

有趣的是這不是在語言做到這一點。它在鏗鏘聲中編譯得很好。 – Kevin

+0

@Kevin編譯器擴展。 –

+1

他可以改用'new'做一個動態分配。 – Mauren

2

此代碼

int n, i; 
float array10[n]; 

是無效的,因爲在C數組+要求它們的尺寸將是在編譯時間常數表達式。 (雖然有些編譯器有自己的語言擴展,但是這些代碼不符合C++標準)。如果定義了一個數組,你可能不會改變它的大小。 如果n是一個常量表達式,那麼你可以寫例如

const int n = 10; 
float array[n]; 
float array1[n + 1] 

否則,你有兩種方法。要麼應該使用標準的C++容器的std ::矢量

例如

int n = 10; 
std::vector<float> v(n); 

,然後可以調整該矢量

v.resize(n + 1); 

或者你應該動態地分配的陣列。例如

int n = 10; 
float *array = new float[n]; 

然後重新分配它;

float *tmp = new float[n + 1]; 

std::copy(array, array + n, tmp); 
delete []array; 
array = tmp; 
1

可以通過聲明array10爲指針

cin >> n; 
float* array10 = new float[n]; 
cin >> array10[i]; 
//do something 
delete[] array10; 
+0

並記住稍後刪除它? – doctorlove

+0

@ k4rlsson ...然後請做到正確! –

+1

這是ub。你是不是指'delete []'?提示 - 這就是爲什麼你更喜歡std :: vector。 –

相關問題