Tôi luôn nghĩ rằng khi khai báo một mảng trong C++, kích thước phải là một giá trị nguyên không đổi.Khai báo kích thước mảng với biến không đổi
Ví dụ:
int MyArray[5]; // correct
hoặc
const int ARRAY_SIZE = 6;
int MyArray[ARRAY_SIZE]; // correct
nhưng
int ArraySize = 5;
int MyArray[ArraySize]; // incorrect
Dưới đây là cũng là những gì được giải thích trong The C++ Programming Language, by Bjarne Stroustrup:
Số phần tử của mảng, mảng bị ràng buộc, phải là một biểu thức không đổi (§C.5). Nếu bạn cần các giới hạn khác nhau, hãy sử dụng một vectơ (§3.7.1, §16.3). Ví dụ:
void f(int i) {
int v1[i]; // error : array size not a constant expression
vector<int> v2(i); // ok
}
Nhưng trước sự ngạc nhiên lớn của tôi, đoạn mã trên không biên dịch tốt trên hệ thống của tôi!
Đây là những gì tôi đã cố gắng để biên dịch:
void f(int i) {
int v2[i];
}
int main()
{
int i = 3;
int v1[i];
f(5);
}
tôi đã không có lỗi! Tôi đang sử dụng GCC v4.4.0.
Có điều gì tôi thiếu không?
Và đây là lý do tại sao thử nghiệm điều gì đó với trình biên dịch không có nghĩa là bất kỳ điều gì về độ chính xác của mã. – GManNickG
Bản sao của http://stackoverflow.com/questions/737240/c-c-array-size-at-run-time-w-o-dynamic-allocation-is-allowed – nico