2011-10-17 78 views
5

Tôi khá mới tại C và tôi không biết sự khác biệt giữa hai khai báo biến sau đây:Sự khác biệt giữa int * ptr và int * ptr trong C là gì?

int* ptr; 
int *ptr; 

Tôi nghĩ rằng trong việc kê khai int* ptr;, ptr 's giá trị không thể thay đổi trong khi nó có thể được thay đổi đối với tuyên bố, int *ptr;

Tôi không chắc liệu đó có phải là mặc dù không.

Hãy giúp tôi hiểu khái niệm đằng sau hai khai báo.

+0

trùng lặp có thể có của [C: có sự khác biệt giữa "int \ * fooBar;" không và "int \ * fooBar;"?] (http://stackoverflow.com/questions/2093459/c-is-there-a-difference-between-int-foobar-and-int-foobar) và [Sự khác biệt giữa int \ * i và int \ * i] (http://stackoverflow.com/questions/3770187/difference-between-int-i-and-int-i), [Sự khác biệt giữa khai báo int \ * p và int \ * p ] (http://stackoverflow.com/questions/5590150/difference-between-int-p-and-int-p-declaration) cùng với ít nhất một tá người khác. –

+0

http://stackoverflow.com/questions/3770187/difference-between-int-i-and-int-i –

Trả lời

23

Để trình biên dịch, không có sự khác biệt giữa hai khai báo.

Đối với trình đọc của con người, trước đây có thể ngụ ý rằng loại "int *" áp dụng cho tất cả các khai báo trong cùng một câu lệnh. Tuy nhiên, * chỉ liên kết với số nhận dạng sau.

Ví dụ: cả hai câu lệnh sau chỉ khai báo một con trỏ.

int* ptr, foo, bar; 
int *ptr, foo, bar; 

Tuyên bố này khai báo nhiều con trỏ, ngăn cản sử dụng khoảng cách "int *".

int *ptr1, *ptr2, *ptr3; 
4

Không gian trong C hầu như không đáng kể. Có những trường hợp không thường xuyên, nơi không gian là quan trọng, nhưng đây là rất ít và xa giữa. Hai ví dụ bạn đăng là tương đương.

2

Giống như những người khác đã nói. Không có sự khác biệt. Nếu bạn muốn hiểu khai báo kiểu C phức tạp hơn, bạn có thể tìm thấy liên kết này một cách có ích. Reading C declarations.

1

int *p;

*p 


là không có ý nghĩa đối với trình biên dịch, (int*) is a type named pointer.

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