Deklaracja funkcji a w niej &

Cześć. Nie obrazajcie sie na mnie za te pytania, ale sam nie dojde do tego.

Spotkałem taka "dziwna" deklaracje i definicje funkcji: typedef struct { unsigned char type; unsigned char value; } Event;

void GetEvent( Event & event ) { event.type = TIME_EVENT; event.value = ticks; }

A wywołanie takiej funkcji:

GetEvent( event );

Dlaczego tak przy deklaracji pojawia sie ampersand &?

Reply to
slawek7
Loading thread data ...

Doczytaj sobie o metodach przekazywania parametrów (przez referencję).

Piotrek

Reply to
Piotrek

Ale gdzie. Przegladam wlasnie kilka ksiazek o C i C++ i zadnej nie znalazlem tego. Jesli wiesz w jakiej o tym pisze to daj znac.

Reply to
slawek7

A to jest referencja czy przekazanie struktury do funkcji?

Reply to
slawek7

Pudło - to jest C++ (ewentualnie C99, ale w każdym razie nie "koszerne" C)

Kiepsko szukałeś. Pierwszy lepszy link prosto z googla

formatting link
Pozdr Portal

Reply to
Portal

Użytkownik "Portal" napisał w wiadomości

A swoja droga - nie uwazacie ze to jakis krok w tyl ? Mozna bylo to samo osiagnac jawnie wskaznikami, a teraz trzeba sie wczytac w funkcje wywolywana, bo nie wiadomo - zmieni nam cos czy nie ma prawa ?

J.

Reply to
J.F

J.F <jfox snipped-for-privacy@poczta.onet.pl> napisał(a):

A przy wskaźnikach nie musiałeś się wczytywać? Różnica jest tylko w momencie patrzenia na wywołanie, gdy nie znasz deklaracji wywoływanej funkcji. A jak znasz i widzisz, że idzie przez referencję to wiesz, że obiekt może być modyfikowany, tak samo jakby szło przez wskaźnik.

Reply to
Grzegorz Niemirowski

Kwestia gustu. Dla ludzi siedzących bardziej w sprzęcie wskaźniki są prostsze do ogarnięcia, bo odnoszą się bezpośrednio do adresów poszczególnych struktur danych w pamięci (przynajmniej tak długo jak się nie używa prawdziwego OSa wprowadzającego wirtualizację). Dla "wysokopoziomowego" software'owca referencje są czystszym mechanizmem, bo odpada cała magia z dereferencją, rzutowaniem i innymi często mało bezpiecznymi konstrukcjami - rzuć takiemu gościowi pomysłem wskaźników do wskaźników albo wskaźników do funkcji i zobaczysz jak się skrzywi ;-). Jedyny problem z C++ jest taki, że wszystkie możliwe mechanizmy przekazywania obiektów lub struktur danych (tzn. przez wartość, wskaźniki lub referencje) są tam dostępne z grubsza na równym poziomie, więc jak się nie rozumie ich specyfiki, to można nieźle się zaplątać. Ale to jest ogólnie cecha języków w których wolno dużo ze strzeleniem sobie w stopę włącznie. A propos, jakby ktoś nie znał:

formatting link
Pozdr Portal

Reply to
Portal

A czy ma tu jakies znaczenie to, ze przekazywana jest struktura zamiast zmiennej?

Reply to
slawek7

Użytkownik "Grzegorz Niemirowski" napisał w wiadomości J.F <jfox snipped-for-privacy@poczta.onet.pl> napisał(a):

Nie musialem. Jak jawnie nie przekazywalem adresu tylko "przez wartosc" to mialem pewnosc ze sie nie zmieni :-) A jak przekazywalem adres ... no to wiedzialem ze musze sie liczyc ze zmiana :-)

J.

Reply to
J.F

W dniu 25.07.2011 14:19, J.F pisze:

Bo referencję zazwyczaj łączy się ze słowem "const". Dzięki temu mamy szybkość i zużycie zasobów jak przy wskaźniku, ale mamy ładny zapis i dodatkowo kompilator sprawdza, czy nie próbujemy modyfikować.

Reply to
Michoo

Użytkownik "Michoo" napisał w wiadomości grup dyskusyjnych:j0jqtl$sh$ snipped-for-privacy@news.onet.pl...

Tylko ze ja musze zajrzec czy tam jest ten const, a nawet jak jest, to i tak moze zmieniac :)

Co do szybkosci to nie bylbym pewien co szybsze, szczegolnie na jakim x86 .. no chyba ze struktura dluga.

J.

Reply to
J.F

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.