2013-03-07 52 views
5

tôi muốn biết sự khác biệt giữaPointer vs Array trong định nghĩa hàm: sự khác nhau giữa void fct1 (int * p) và void fct1 (int p []) là gì?

void fct1(int *p) 

void fct1(int p[]) 

tôi biết rằng cả hai đều là con trỏ nhưng có bất kỳ sự khác biệt là những gì

+1

@Mark Ransom cảm ơn bạn đã trả lời nhanh. nhưng tôi nghe nói rằng int p [] là một con trỏ không đổi nên địa chỉ mà nó trỏ đến không thể thay đổi là đúng? – user2142328

+0

("con trỏ hàm" là con trỏ trỏ đến hàm, không phải hàm nào có con trỏ .. mà đang được nói, tôi chắc chắn rằng * phải * trùng lặp.) –

+1

@ user2142328 'p []' khai báo mảng có kích thước sau đó được xác định. Điều đó sẽ là bất hợp pháp trong một tham số hàm, có kích thước phải được biết ngay lập tức. Vì vậy, trong bối cảnh này nó được xử lý đặc biệt, nhận được một chuyển đổi ngay lập tức để '* p'. – Potatoswatter

Trả lời

8

Có hoàn toàn không có sự khác biệt khi sử dụng như một chức năng tham số như thế. Trình biên dịch xử lý cả hai dạng giống hệt nhau.

2

Không có sự khác biệt. Để hoàn chỉnh, đây là những gì tiêu chuẩn nói:

C99 chuẩn 6.7.5.3 phần 7

Một tuyên bố của một tham số là '' mảng của loại '' sẽ được điều chỉnh để '' con trỏ có trình độ đến loại '', ...

Các vấn đề liên quan