Mảng và con trỏ không giống nhau trong C, mặc dù chúng có liên quan và có thể được sử dụng tương tự nhau. Cho đến nay tất cả chúng ta đều đồng ý.
Tuy nhiên, tôi không thấy lý do tại sao các mảng được đưa vào C, khi các con trỏ có thể hoàn thành công việc của chúng một cách hoàn hảo.
Tôi không nói để loại bỏ ký hiệu mảng (ví dụ: a [5] hoặc int a [4] = {0,1,2,3};), khá hữu ích và thuận tiện. Nhưng bạn có thể có cùng một ký hiệu làm việc trên đầu con trỏ (như trường hợp), như một biện pháp thẩm mỹ. Vì vậy, ký hiệu mảng không phải là lý do để có mảng, chỉ là ký hiệu!
Sự khác biệt duy nhất tôi thấy là các mảng là các con trỏ không đổi và kích thước của bộ nhớ mà chúng trỏ tới không thể thay đổi. Nhưng điều này cũng có thể đạt được với các con trỏ, chính xác bằng cách làm cho chúng không đổi (bộ nhớ sẽ không có kích thước cố định, nhưng tôi không chắc đây có phải là vấn đề không).
Vậy tại sao không chỉ có con trỏ và để người lập trình quyết định con trỏ nên hành xử như thế nào (nghĩa là không đổi, không phải là hằng số, kích thước cố định, kích thước thay đổi, v.v.)?
x = a + b * 2;
khi bạn có thể đạt được điều tương tự với một chuỗi các biểu thức đơn giản như thế x = b; x*=2; x+=a;
nào?