RTV forum PL | NewsGroups PL

Znaczenie ampersanda & w deklaracji funkcji i przekazywaniu struktur w C++

Deklaracja funkcji a w niej &

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Znaczenie ampersanda & w deklaracji funkcji i przekazywaniu struktur w C++

slawek7
Guest

Mon Jul 25, 2011 7:32 am   



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 &?

Portal
Guest

Mon Jul 25, 2011 7:32 am   



On 07/25/2011 08:51 AM, slawek7 wrote:
Quote:
Ale gdzie.
Przegladam wlasnie kilka ksiazek o C

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

Quote:
i C++ i zadnej nie znalazlem tego.
Jesli wiesz w jakiej o tym pisze to daj znac.

Kiepsko szukałeś. Pierwszy lepszy link prosto z googla
http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/

Pozdr
Portal

Piotrek
Guest

Mon Jul 25, 2011 7:32 am   



On 2011-07-25 07:32, slawek7 wrote:
Quote:
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&?

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

Piotrek

J.F
Guest

Mon Jul 25, 2011 8:04 am   



Użytkownik "Portal" napisał w wiadomości
Quote:
i C++ i zadnej nie znalazlem tego.
Jesli wiesz w jakiej o tym pisze to daj znac.

Kiepsko szukałeś. Pierwszy lepszy link prosto z googla
http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/

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.

Grzegorz Niemirowski
Guest

Mon Jul 25, 2011 8:33 am   



J.F <jfox_xnospamx@poczta.onet.pl> napisał(a):
Quote:
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.

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.

--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 12 days, 7 hours, 9 minutes and 13 seconds

slawek7
Guest

Mon Jul 25, 2011 8:51 am   



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.

slawek7
Guest

Mon Jul 25, 2011 8:54 am   



A to jest referencja czy przekazanie struktury do funkcji?

Portal
Guest

Mon Jul 25, 2011 9:05 am   



On 07/25/2011 10:04 AM, J.F wrote:
Quote:
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 ?

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 Wink.
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ł:
http://www.thealmightyguru.com/Humor/Docs/ShootYourselfInTheFoot.html

Pozdr
Portal

slawek7
Guest

Mon Jul 25, 2011 12:00 pm   



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

J.F
Guest

Mon Jul 25, 2011 12:19 pm   



Użytkownik "Grzegorz Niemirowski" napisał w wiadomości
J.F <jfox_xnospamx@poczta.onet.pl> napisał(a):
Quote:
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 ?

A przy wskaźnikach nie musiałeś się wczytywać?

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

J.

Michoo
Guest

Mon Jul 25, 2011 1:25 pm   



W dniu 25.07.2011 14:19, J.F pisze:
Quote:
Użytkownik "Grzegorz Niemirowski" napisał w wiadomości
J.F <jfox_xnospamx@poczta.onet.pl> napisał(a):
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 ?

A przy wskaźnikach nie musiałeś się wczytywać?

Nie musialem. Jak jawnie nie przekazywalem adresu tylko "przez wartosc"
to mialem pewnosc ze sie nie zmieni Smile
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ć.

--
Pozdrawiam
Michoo

J.F
Guest

Mon Jul 25, 2011 3:57 pm   



Użytkownik "Michoo" napisał w wiadomości grup
dyskusyjnych:j0jqtl$sh$1@news.onet.pl...
Quote:
A przy wskaźnikach nie musiałeś się wczytywać?
Nie musialem. Jak jawnie nie przekazywalem adresu tylko "przez
wartosc"
to mialem pewnosc ze sie nie zmieni Smile
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ć.

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.

elektroda NewsGroups Forum Index - Elektronika Polska - Znaczenie ampersanda & w deklaracji funkcji i przekazywaniu struktur w C++

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map