2012-04-08 19 views
6

Niedawno natknąłem się na to wideo na Programming Paradigms, a prof. używane terminy takie jak Gwiazdki, Gwiazda i Ampersand.C++: Asterisks, Ampersand and Star?

To właśnie jak użył tych operatorów:

int i = 37; 
float f = *(float*)&i; 

I jak on wyraził linii 2 pisząc go:

Float "F" jest równa gwiazdka pływaka gwiazdę ampersanda od I

Rozumiem, co oznaczają gwiazdki i znaki ampersand, ale jakie jest znaczenie używania gwiazdy tutaj? Czy jest to synonim gwiazdki?

+5

Zapomniał wymienić nawiasy. –

+5

... i średnik. – Blastfurnace

+0

Sprawia, że ​​zastanawiam się, jeśli cokolwiek powiesz, dlaczego nie po prostu powiedzieć, co robi zamiast tego ... – Bart

Odpowiedz

8

Po służy do tworzenia typu. Bardzo często w odniesieniu do typu wskaźnika w słowach ludzie powiedzą "gwiazda" po typie raczej "wskaźnik", np. "malloc zwraca gwiazdę pustą". Nigdy nie słyszałem, żeby ktokolwiek użył "gwiazdki" do określenia typu.

Początek * służy do odrejestrowania wskaźnika, uzyskując dostęp do wartości, na którą wskazuje (interpretowane jako float z powodu następującego rzutowania). Ponownie, z własnego doświadczenia nigdy nie słyszałem, żeby ktokolwiek użył tutaj "gwiazdki". Ludzie po prostu mówią "odreagowanie", aby opisać wykonywaną operację.

Nie przeczytałbym za dużo.Istnieją dwa różne konteksty, o których słusznie zauważyłeś i dopóki rozumiesz, co one oznaczają z punktu widzenia C++, to jest w porządku.

+0

Dzięki! To skutecznie odpowiada, dlaczego prof powiedział "gwiazda" zamiast "gwiazdka". – witherspoon

0

Wydaje mi się, że prezenter chciał uniknąć niezręcznej ciszy podczas pisania kodu. O ile mi wiadomo, w tym kontekście nie ma różnicy między gwiazdką a gwiazdą.

2
float f = *(float*)&i; 

W tym przypadku lewy * i prawy * ma różne znaczenia. Left * oznacza wartość uzyskiwania przez refernce. Prawo * deklaruje typ odniesienia.

+0

"ma inną semantykę" Nie ma znaczenia dla wymowy - wciąż jest tym samym symbolem. – SigTerm

+0

Tak, oczywiście) –

1

Czy jest to synonim gwiazdki?

Tak. Shift + 8 na klawiaturze okiennej MY. Twój przykład pokazuje, dlaczego nie powinieneś próbować czytać głośno na głos w języku C++ symbolem. "Równa się" w C++ to "==". "=" jest przypisaniem. Poza tym zapomniał powiedzieć o nawiasach i średniku. W tym momencie (4 błędy w jednym wierszu kodu) mógł napisać to cholernie cicho.

Byłoby znacznie lepiej, gdyby koleś przeczytać tę część:

float f = *(float*)&i; 

nieco jak poniżej:

„Take wskaźnik I, C-styl wrzucił wskaźnik do pływaka, dereference i przypisz wartość float zmiennej f ". Ma znacznie więcej sensu niż bełkot "gwiazda/gwiazdka".

P.S. Jeśli naprawdę uwielbiasz przekręcane języki, możesz spróbować głośno odczytać dowolny kod, który używa boost, iostreams, operator < <, rzutowania, operacje bitowe i "wielbłąd", aby rozróżnić klasy i metody. Takie ćwiczenie nie poprawi oczywiście twoich umiejętności programowania ...

+2

SHIFT + 8 to "(" na mojej klawiaturze (również okna!) Nie powinieneś zakładać, że wszystkie klawiatury mają ten sam układ na całym świecie –

+3

-1: OP wie, że jest to ten sam symbol Myślę, że to bardzo niegrzeczne. Pytanie polega po prostu na pytaniu, czy było jakieś znaczenie dla używania dwóch różnych terminów w oparciu o dwa różne konteksty, w których * został użyty. * – Troubadour

+0

@Troubadour: "Myślę, że to bardzo niegrzeczne". Uważam, że jest to bardzo niegrzeczne i nie miało być niegrzeczne, więc jeśli * ty * uważasz, że to jest niegrzeczne, to dlatego, że wyciągasz wnioski. "Znaczenie dla używania dwóch różnych terminów" Nie ma tam nie było żadnego znaczenia, o ile wiem "gwiazdka" i "gwiazdka" nie są częścią jakiegoś dobrze znanego żargonu C++ i nie odnoszą się powszechnie do "derefernece" lub "cast". lepsze warunki - "derefernece" i "cast" – SigTerm