O co chodzi z referencją?

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.

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.

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

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

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...

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.

1

Opis referencji->http://pl.wikibooks.org/wiki/C++/Referencje

Różnica ->http://stackoverflow.com/questions/57483/what-are-the-differences-between-a-pointer-variable-and-a-reference-variable-in

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