• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przekazywanie argumentów funkcji

Object Storage Arubacloud
0 głosów
578 wizyt
pytanie zadane 28 marca 2016 w C i C++ przez Barus Stary wyjadacz (14,120 p.)

Witam :)

Czytając książki i oglądając tutoriale z C++ dany autor mówi/pisze o przekazywaniu funkcji argumentu przez wskaźnik lub referencję. Wiem czym jest wskaźnik i referencja, i znam różnice między nimi. O przesyłaniu parametru przez referencję słyszałem lub czytałem dużo razy, ale w nielicznych artykułach autorzy mówią też o przesyłaniu przez wskaźnik. Jaka jest różnica między tymi dwoma sposobami przesyłania i jak je poprawnie zapisać w C++, bo przyznam, że trochę się już pogubiłem :/ ?

Proszę o pomoc. Pozdrawiam!    

2 odpowiedzi

0 głosów
odpowiedź 28 marca 2016 przez Shiro Stary wyjadacz (10,300 p.)

Oczywiście mogę się mylić jednak z tego wywnioskowałem z odcinka 9 kursu programowania pana Mirosława to referencje = wskaźnik. 

Otóż gdy chcemy posłać funkcji oryginał to tego przysłowiowemu pracownikowi wystawiamy referencie.

Co do kodu to mogę Ci przesłać kod z kursu wygląda on mniej więcej tak:

PRZESYŁANIE ORYGINALNYCH ZMIENNYCH:

#include <iostream>

using namespace std;

float srednia(float &a, float &b, float &c)
{

    return (a+b+c)/3;
}


int main()
{

    float a,b,c;

    a = 1.5;
    b = 2.3;
    c = 0.75;

    cout << "srednia: " <<srednia(a,b,c);

    return 0;
}

PRZESYŁANIE ORYGINALNYCH TABLIC:

#include <iostream>

using namespace std;

float srednia(float *tab, int ile)
{
    float suma=0;

    for(int i=0; i<ile; i++)
    {
        suma +=*tab;
        *tab=999;
        tab++;
    }

    return suma/ile;
}


int main()
{

    float tablica[3];

    tablica[0] = 1.5;
    tablica[1] = 2.3;
    tablica[2] = 0.75;

    cout << "srednia: " <<srednia(tablica,3);

    cout <<endl<< tablica[0]<<endl;
    cout << tablica[1]<<endl;
    cout << tablica[2]<<endl;

    return 0;
}

Tak jak pisałem na początku mogę się mylić więc jeśli piszę głupoty to na stos ze mną ;D Miłego dnia!

komentarz 28 marca 2016 przez Barus Stary wyjadacz (14,120 p.)
Znaczy, referencje są podobne do wskaźników, ale to nie to samo, bo referencje muszą wskazywać na dany adres (nie są tak "elastyczne" jak wskaźniki). :) Tak, oglądałem oczywiście kurs, ale chodzi mi o przesyłanie argumentu w przypadku przesłania przez wskaźnik i przez referencję - jak zapisać prototyp(nagłówek funkcji) i jak zapisać wywołanie funkcji w programie głównym :P Dziękuję za komentarz :)

Pozdrawiam!
komentarz 28 marca 2016 przez niezalogowany
Ten drugi przykład jest bezsensu bo nie trzeba używać wskaźników żeby przesłać du funkcji orginał tablicy.
komentarz 28 marca 2016 przez Shiro Stary wyjadacz (10,300 p.)
@badbullpl Mógłbyś w wolnej chwili przerobić w takim razie ten 2gi kod tak aby przesyłał oryginał, gdyż myślałem że właśnie tak się wysyła oryginał (tak było w kursie)

Pozdrawiam!
komentarz 28 marca 2016 przez niezalogowany
0 głosów
odpowiedź 28 marca 2016 przez niezalogowany
Jeśli piszesz w C używasz wskaźników, a jeśli w C++ referencji. I tyle. Referencje w C++ powstały tylko po to żeby jak najmniej używać wskaźników.
komentarz 28 marca 2016 przez Barus Stary wyjadacz (14,120 p.)
Mógłbyś napisać jak w przypadku przesłania przez referencję wygląda prototyp i wywołanie funkcji ? Nie wiem czemu, ale miesza mi się to i nie wiem czy w przypadku przesłania tablic, zmiennej, zmiennej wskaźnikowej itd będzie tak samo czy inaczej. :/ Dziękuję za odpowiedź!
komentarz 28 marca 2016 przez niezalogowany
komentarz 28 marca 2016 przez Barus Stary wyjadacz (14,120 p.)
Czyli mam rozumieć, że w programie głównym podczas wywołania przy argumentach nie dodajemy żadnych znaków przy zmiennej, a w prototypie dla zwykłej zmiennej dajemy znak referencji, dla wskaźnika - znak wskaźnika, a dla tablicy nic, bo tablice i tak nie są kopiowane, a wysyła się oryginał ? :)
1
komentarz 28 marca 2016 przez niezalogowany
Przy tablicy musisz dodać w prototypie "[]"(popatrz na przykład) a reszta tak jak piszesz.
komentarz 28 marca 2016 przez Barus Stary wyjadacz (14,120 p.)
I teraz już wszystko jasne! :) Dziękuję Ci serdecznie za poświęcony czas i za odpowiedzi :)

Mokrego Dyngusa!

Podobne pytania

0 głosów
1 odpowiedź 327 wizyt
pytanie zadane 4 marca 2023 w JavaScript przez TOWaD Mądrala (5,700 p.)
0 głosów
2 odpowiedzi 9,296 wizyt
0 głosów
1 odpowiedź 148 wizyt
pytanie zadane 20 stycznia 2016 w C i C++ przez Jonki Dyskutant (8,180 p.)

92,572 zapytań

141,422 odpowiedzi

319,644 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...