Chỉ đơn giản là quen thôi, nhưng cú pháp như vậy là không nhất quán. Rõ ràng a
có kiểu dữ liệu là int[]
, lẽ ra cú pháp như vậy phải là SAI.
Các ngôn ngữ hướng đối tượng mình biết thì array là class nên không khai báo mảng trên stack như C/C++ được. Một đối tượng mảng buộc phải khai báo trên heap thông qua toán tử new
hoặc các array object khác. Nhưng cách khai báo như vậy tuân thủ quy định chung về cú pháp khai báo: <kiểu dữ liệu> <TênBiến>;
hoặc <kiểu dữ liệu> <TênBiến> = <đối tượng>;
(ví dụ int[] a = new int[10];
) (Đây mới là cách Java hay dùng)
C++ đi lên từ C, trong C thì mảng chẳng phải struct cũng chẳng phải class, chỉ đơn giản là một kiểu dữ liệu. Thế nên khai báo tầm bậy cũng chả chết ai, khai báo mảng 10 phần tử xong truy cập đến phần tử thứ 15 cũng ok.
Việc khai báo trên stack chẳng nhanh hơn so với khai báo trên heap là bao nhiêu, chỉ đảm bảo ứng dụng không bị memory leak. Tuy nhiên stack cung cấp cho mỗi ứng dụng là có hạn, tuỳ theo kiến trúc hệ điều hành (64 bit/32 bit…), trong khi heap thì vô tận, chừng nào RAM còn chỗ. Chính việc khai báo các biến trên stack mới chiếm chỗ bộ nhớ, nếu như LTV có khả năng quản lý tốt cấp phát động. Hoặc như các ngôn ngữ hướng đối tượng phổ biến như Java, C# thì sẽ có GC lo liệu.