2012-01-20 69 views
6

Khi tạo một mảng con trỏ trong c, tác động của việc thêm dấu ngoặc đơn là gì?Mảng con trỏ

Ví dụ

int (*poi)[2];

vs

int *poi[2];

+0

Tiết kiệm hao mòn trên bàn phím –

Trả lời

8

Con trỏ trỏ tới một mảng của 2 int s:

int (*poi)[2]; 

Một mảng hai int con trỏ:

int *poi[2]; 

Mảng thường có ưu tiên cao hơn con trỏ, nhưng nếu bạn thêm dấu ngoặc thì con trỏ sẽ là "đầu tiên".

+0

.. thực sự? [] là ràng buộc chặt chẽ hơn tôi không thấy lý do tại sao này là – lynnyilu

+0

@LynnYiLu - Chỉ cần cách C tiêu chuẩn được xác định. – Hogan

+1

http://binglongx.wordpress.com/2009/01/25/how-to-read-a-cc-declaration/ – Hogan

0

Chân đế buộc chặt hơn *, vì vậy đầu tiên là một mảng con trỏ int, trong khi dấu thứ hai là một con trỏ tới một mảng int.

+1

Bạn có mà trở lại phía trước, phải không? –

+0

Cách khác tôi nghĩ. –

2

Toán tử chỉ mục [] liên kết mạnh hơn toán tử hủy đăng ký *.

int *poi[2] 

dịch để:

Nếu bạn thấy poi, áp dụng [x] với nó, sau đó dereference kết quả qua * và bạn nhận được một int. Vì vậy, nó là một mảng của 2 con trỏ đến int.

Trong

int (*poi)[2] 

các parantheses buộc * được áp dụng đầu tiên. Vì vậy, bất cứ lúc nào poi được sử dụng, nếu bạn áp dụng * trước, và sau đó [x] bạn nhận được int. Vì vậy, nó là một con trỏ đến một mảng của 2 int.