xem xét mã:Đối số mảng có được chuyển đến một hàm không phải là một con trỏ không?
void foo(char a[]){
a++; // works fine, gets compiled
//...
}
Bây giờ, hãy xem xét điều này:
void foo(){
char a[50];
a++; // Compiler error
//...
}
tôi nghe một mảng tương đương với một con trỏ liên tục và không thể tăng lên vì nó không phải là một giá trị trái ...
Sau đó, tại sao mã đầu tiên được biên dịch, có phải vì đối số mảng cho hàm được truyền dưới dạng con trỏ hay không, tức là T [] được chuyển thành T * để chuyển .. Vì vậy, foo (a) chuyển thành con trỏ.
Nhưng là nó không trở lại được chuyển đổi để T [] một lần nữa vì được khai báo là:
void foo(char a[]);
Đọc phần 6 của [comp.lang.c FAQ] (http://c-faq.com). –