Trước tiên, hãy xem tiêu chí cho một mảng (không phải là) một VLA. C11
doc, chương §6.7.6.2,
[...] Nếu kích thước là một số nguyên không đổi biểu và các loại nguyên tố có một kích thước không đổi được biết, loại mảng không phải là một biến chiều dài mảng loại ; [...]
Đến với trường hợp của bạn, sizeof
là toán tử biên dịch, vì vậy nó tạo ra giá trị được coi là biểu thức hằng số biên dịch theo thời gian. Định nghĩa mảng có kích thước được chỉ định dưới dạng biểu thức hằng số thời gian biên dịch không phải là VLA. Vì vậy, trong mã của bạn,
int other_array[sizeof(array)]
không phải là VLA.
Về kết quả sizeof
điều hành, từ C11
, chương §6.5.3.4, (nhấn mạnh tôi)
Nhà điều hành sizeof
mang lại kích thước (tính theo byte) của toán hạng của nó, có thể là một biểu thức hoặc tên được ghi trong ngoặc đơn. [...] nếu không, toán hạng không được đánh giá và kết quả là hằng số nguyên.
Nguồn
2015-08-25 19:45:11
whaoppps, editied –
Không có mảng kích thước biến trong C89, vì vậy nó không thể được coi là một khai báo mảng kích thước biến. . –