O co chodzi z referencją?

2015-02-14 13:50
0

Próbuję zrozumieć referencję i jakoś mnie to przerasta. Napisałem taki kod:

#include <iostream>

using namespace std;

void podaj_liczbe(int *x) {
    *x = 10;
    return;
}

void podaj_inna_liczbe(int &x) {
    x = 100;
    return;
}

int main()
{
    int liczba;
    podaj_liczbe(&liczba);
    cout << "Liczba 1:" << liczba << endl;
    podaj_inna_liczbe(liczba);
    cout << "Liczba 2:" << liczba << endl;

    return 0;
}

I na moje oko obie obie funkcje działają tak samo. Ideę wskaźników rozumiem, za to ni cholery nie umiem zrozumieć idei referencji :(
Czy ktoś umie to jakoś przystępnie wyjaśnić, co się wtedy dzieje i porównać to z wersją ze wskaźnikiem, która jest logiczna i jasna. Na razie to referencja jawi mi się jako wskaźnik z ukrytym zapisem wskaźnika.

edytowany 1x, ostatnio: heillos, 2015-02-14 13:51

Pozostało 580 znaków

2015-02-14 14:06
0

Referencja to nic innego jak wskaźnik, z tym ze nie mozesz go zmieniac (coś w stylu const) i nie moze miec wartosci nullptr tzn. zawsze prowadzi do jakiejś innej zmiennej, a wskaźnik moze wskazywać na nic czy nawet naruszyć pamieć - Referencja jest pod tym względem bezpieczniejsza. Poza tym wskaźnik to zmienna z własnym miejscem w pamieci. Referencja nie istnieje w pamięci, tzn. Nie ma własnego adresu.

edytowany 3x, ostatnio: abbq, 2015-02-14 14:11

Pozostało 580 znaków

2015-02-14 14:48
4

Referencja to nic innego jak wskaźnik (...)

Bzdura. Referencja to referencja, to inny typ niż wskaźnik. (3.9.2.1, 8.3.2)

(...) Referencja nie istnieje w pamięci, tzn. Nie ma własnego adresu.

Bzdura. To, czy referencja zajmuje miejsce czy nie, jest zdefiniowane przez implementację. (8.3.2.4)

Reszta się jakby zgadza.

Dość dokładny opis referencji jest tutaj: http://en.cppreference.com/w/cpp/language/reference


"(...) otherwise, the behavior is undefined".
edytowany 2x, ostatnio: Endrju, 2015-02-14 19:12

Pozostało 580 znaków

2015-02-14 19:16
0

referencja to zmienna obiektowa czyli referencja:

  • nie jest obiektem
  • jest tylko zwykłą zmienną której używa się do komunikacji z obiektem
  • jeden obiekt może mieć wiele referencji

referencja zawiera informacje o położeniu obiektu w pamięci i umożliwia do niego dostęp

Pozostało 580 znaków

2015-02-14 23:02
0

No akurat referencje są też w C, więc wiązanie ich z obiektami jest takie sobie.
Niestety nie umiem ogarnąć różnicy pomiędzy referencją a wskaźnikiem, odpowiedź abbq jeszcze najbardziej jest bliska mojemu czuciu problemu, ale chciałbym to zrozumieć fachowo, wewnętrznie...

W C są referencje? - some_ONE 2015-02-14 23:08
Kurde, wydawało mi się, że są. Może też ktoś mieszał pojęcia w jakiejś literaturze, którą czytałem. - heillos 2015-02-14 23:21
To chyba prędzej ty coś pomieszałeś :P - some_ONE 2015-02-14 23:22
Możliwe, wracam do podstaw programowania po 15 latach, mogły mi się fakty z różnych rzeczy pomieszać. - heillos 2015-02-14 23:34

Pozostało 580 znaków

2015-02-14 23:15
0
#include <iostream>
using namespace std;

int main() {
    int a = 6, b = 7, &foo = a, *bar = &a;
    cout << foo << endl;
    cout << bar << endl;
    foo = 7;
    bar = &b;
    cout << a << ":" << foo << endl;
    cout << bar << ":" << *bar << endl;
    return 0;
}

http://ideone.com/EwHa8G
Wskaźnik wskazuje na adres.

edytowany 1x, ostatnio: spartanPAGE, 2015-02-14 23:16

Pozostało 580 znaków

2015-02-14 23:15
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0