tại vì mảng trong C decay thành con trỏ. Chữ decay ko biết dịch là gì :V
thời xa xưa C++ làm theo C để code C cũng biên dịch với trình biên dịch C++ được. Mảng trong C bị decay thành con trỏ ko biết vì sao :V Nhưng có lẽ là vì hàm trong C ko có quá tải được (overload, hay nhiều hàm cùng tên nhưng khác tham số), nên khai báo void f(char s[10])
với void f(char s[20])
thì cả 2 hàm chỉ có 1 tham số là mảng s
, nhưng mảng cần tới 2 tham số là vị trí của mảng và kích cỡ mảng mới phân biệt char[10] với char[20] được, nhưng ở đây f chỉ nhận 1 tham số nên nó đành phải vứt tham số kích cỡ mảng đi còn cái con trỏ tới phần tử đầu tiên của mảng :V
quá khứ ko cho phép gọi &a
nếu a là mảng, vì khi viết a
thì nó đã bị decay thành con trỏ tới mảng hay địa chỉ của mảng rồi ko cần &a nữa, nhưng sau đó được cho phép :V