Hãy xem xét theo cách khác. Mảng hoạt động trên phân bổ tĩnh trong C/C++. Vì vậy, chúng ta phải chắc chắn rằng trình biên dịch có thể tìm ra kích thước của mảng tại thời gian biên dịch chính nó, đó là điều kiện bắt buộc với mảng vì rất nhiều lý do chết tiệt. Vì vậy, bất cứ khi nào trình biên dịch gặp ký hiệu '[]', nó hy vọng rằng kích thước bộ nhớ (cần phải được cấp phát khi chạy) có thể được tìm ra từ chính mã.
Khi xác định một mảng trong C/C++, bộ nhớ cho mảng được cấp phát (Khi tôi nói mảng, tôi có nghĩa là các ô nơi các phần tử mảng sẽ được lưu trữ). Bây giờ, khi bạn nói giống như
int a[] = {3,4,5,6};
Nó sẽ phân bổ một số bộ nhớ, nói 16 trình biên dịch cho 4 phần tử, có thể được trình biên dịch tìm ra trong thời gian biên dịch.
Bây giờ khi bạn nói
int a2[] = a;
Trình biên dịch thấy các ký hiệu mảng '[]', nhưng không thể xác định có bao nhiêu bộ nhớ cần được phân bổ cho các tế bào mảng, mang đến cho bạn một lỗi.
Khi chúng ta nói về một mảng, nó luôn luôn là một ô không quan tâm được trỏ bởi một con trỏ liên tục, trong khi chúng ta nói về một con trỏ, nó có thể tồn tại mà không cần tham chiếu bất cứ thứ gì. Hy vọng nó giúp.
Bởi vì: ** Mảng là * NOT * con trỏ!** –
Câu chuyện dài ngắn, sử dụng 'std :: array' và sao chép-khởi tạo, vv tất cả các bạn muốn. – chris
@Als Điều đó không giải thích tại sao không có cú pháp (đơn giản, gán-vận hành dựa trên) để sao chép-khởi tạo một mảng. – jogojapan