Czy to prawda, że Gwiazdka zawsze oznacza "Hej, to jest wskaźnik!" A wskaźnik zawsze ma adres pamięci?Co oznacza Asterisk * w Objective-C?
(tak, znany z wyjątkiem tego, że A * jest wykorzystywany do pracy matematycznej)
np
NSString* myString;
lub
SomeClass* thatClass;
lub
(*somePointerToAStruct).myStructComponent = 5;
Czuję, że jest mnie więcej trzeba wiedzieć o Asterirsku (*), niż używam go podczas definiowania zmiennej, która jest wskaźnikiem dla klasy.
Ponieważ czasami już mówię w deklaracji parametru, że zmienna Parametr jest wskaźnikiem i nadal muszę użyć gwiazdki przed zmienną, aby uzyskać dostęp do wartości. To się ostatnio stało po tym, jak chciałem przekazać wskaźnik struktury do metody w taki sposób, jak [myObj myMethod: & myStruct], nie mogłem uzyskać dostępu do wartości komponentu z tej struktury, mimo że moja deklaracja metody już mówiła, że istnieje parametr (DemoStruct *) myVar, który rzeczywiście powinien być już znany jako wskaźnik do tego demostruktu, wciąż miałem do powiedzenia: "Człowieku, kompilatorze, posłuchaj! It IIISSS a wskaźnik:" i napisz: (* myVar) .myStructComponentX = 5;
Naprawdę naprawdę nie rozumiem, dlaczego muszę to powiedzieć dwa razy. I tylko w tym przypadku.
Kiedy używam gwiazdki w kontekście NSString * myString, wtedy mogę uzyskać dostęp do myString, ale lubię, bez informowania kompilatora za każdym razem, gdy jest to wskaźnik. np. używając * myString = @ "yep".
Po prostu nie ma dla mnie sensu.
Właściwie jest to pytanie C, ponieważ nie jest specyficzna dla Objective-C :) –
duplikat http://stackoverflow.com/questions/581657/why-do-i-have-to-write-mypointervar-only-sometimes-inobjective-c – philant
co jest specyficzne dla Objective- C to notacja @ "..." dla obiektu typu string. W kakao klasą takich obiektów łańcuchowych jest NSString. – mouviciel