Tôi đang học C hôm nay. Tôi đã được mã hóa trong các ngôn ngữ được quản lý (Java, C#, Python, vv) trong một thời gian. Tôi nghĩ rằng tôi đã hiểu được chi tiết của con trỏ, nhưng sau đó tôi đã viết mã sau đây hoạt động như mong đợi, nhưng tạo ra cảnh báo 'loại con trỏ không tương thích'.Làm rõ lý do tại sao mã C này hoạt động
void setText(char* output) {
//code to set output to whatever, no problems here.
}
int main(int argc, const char* argv[]) {
char output[10];
setText(&output);
//[EDITED] ...other test code which printf's and further manipulates output.
return 0;
}
Vì vậy, tôi googled, và kết thúc việc thay đổi dòng
setText(&output);
để
setText(output);
mà đã thoát khỏi những cảnh báo. Nhưng bây giờ tôi không biết tại sao người đầu tiên làm việc gì cả. Tôi đã gửi địa chỉ của một địa chỉ như xa như tôi có thể nói (vì char * x; về cơ bản là giống như char x [];). Tôi đang hiểu lầm gì và tại sao cả hai đều làm việc?
Thật khó để cho bạn biết tại sao 'setText' hoạt động mà không thấy triển khai. Mặc dù, nếu tất cả 'setText' làm được thiết lập một biến, sau đó chương trình thoát, làm thế nào bạn có thể thực sự biết nếu chương trình đang làm những gì bạn muốn? – jwodder
'T *' là * không * giống với 'T [K]'. Xem ví dụ http://c-faq.com/~scs/cgi-bin/faqcat.cgi?sec=aryptr – delnan
@delnan: Liên kết dường như bị hỏng – Cameron