Có đúng không, dấu hoa thị luôn có nghĩa là "Này, đó là con trỏ!" Và một Con trỏ luôn giữ địa chỉ bộ nhớ?Asterisk * có nghĩa là gì trong Mục tiêu-C?
(Vâng, tôi biết ngoại trừ rằng một * được sử dụng cho hoạt động toán học)
Ví dụ:
NSString* myString;
hoặc
SomeClass* thatClass;
hoặc
(*somePointerToAStruct).myStructComponent = 5;
Tôi cảm thấy có nhiều hơn tôi cần biết về Asterirsk (*) hơn là tôi sử dụng nó khi định nghĩa một Biến là một con trỏ tới một lớp.
Bởi vì đôi khi tôi đã nói trong khai báo tham số mà biến Tham số là một con trỏ, và tôi vẫn phải sử dụng dấu hoa thị trước biến để truy cập giá trị. Điều đó gần đây đã xảy ra sau khi tôi muốn chuyển một con trỏ của một cấu trúc đến một phương thức theo cách như [myObj myMethod: & myStruct], tôi không thể truy cập một giá trị thành phần từ cấu trúc đó mặc dù khai báo phương thức của tôi đã nói rằng có một tham số (DemoStruct *) myVar mà thực sự nên được biết đến như là một con trỏ để demostruct đó, tôi vẫn luôn luôn nói: "Man, compiler. Nghe! Nó IIISSS một con trỏ:" và viết: (* myVar) .myStructComponentX = 5;
Tôi thực sự thực sự không hiểu tại sao tôi phải nói điều đó hai lần. Và chỉ trong trường hợp này.
Khi tôi sử dụng dấu sao trong ngữ cảnh của một NSString * myString thì tôi chỉ có thể truy cập myString tuy nhiên tôi thích, mà không cần nói trình biên dịch mỗi khi nó là một con trỏ. ví dụ như sử dụng * myString = @ "yep".
Điều đó không có ý nghĩa với tôi.
Đây thực sự là một câu hỏi C vì nó là không cụ thể cho Mục tiêu-C :) –
trùng lặp của http://stackoverflow.com/questions/581657/why-do-i-have-to-write-mypointervar-only-sometimes-in-objective-c – philant
những gì cụ thể cho Mục tiêu- C là ký hiệu @ "..." cho một đối tượng chuỗi. Trong Cocoa, lớp của các đối tượng chuỗi như vậy là NSString. – mouviciel