Ссылки, указатели - в чём разница

когда я читал про указатели и ссылки
поехала крыша от путаницы
указатели — я разобрался
ссылки вроде тоже самое но все говорят что это не так
прошу помощи
дайте пример указателя и ссылки
спасибо

С помощью ссылки можно задавать альтернативное имя для переменной. По сути, ссылка в C++ — это безопасные указатель, которые ссылается на адрес какой-либо переменной.

Например:

int a = 10; // Объявление переменной a.
int &ra = a; // Создание ссылки на переменную "a"

cout << &a << endl; // Вывод на экран адреса переменой a
cout << &ra << endl; // Ссылка "ra" хранит в себе этот же адрес

При выполнении программы, выводимые адрес будут одинаковыми. Например:

0xbfd86d6c
0xbfd86d6c

При выводе адресов используется оператор &. В данном контексте он является оператором взятия адреса, и не имеет никакого отношения к созданию ссылки.

При изменении значения переменной a, значение в ra также будет другим. На самом деле, конечно ничего не изменится — просто ссылка хранит в себе адрес переменной, и при обращении к ссылке происходит обращение по тому адресу, на который она указывает.

Ссылку нельзя объявить без инициализации. Т.е. нужно обязательно указать переменную, на которую ссылка должна указывать. Поэтому, подобная запись недопустима.

int &ra; // Ссылку нельзя объявить без инициализации значения
int * pi = 0;
int & i = *pi;

//вот вам кривая ссылка с нулевым адресом ))
#include <iostream>
using namespace std;
int main()
{
    // Объявлена переменная a1 и ей присвоено значение 5
    int a1 = 5;
    // Объявлена и проинициализирована ссылка b1 и ей присвоен псивданим a1
    int&b1 = a1;
    // Вывод значения ссылки b1 который равен 5
    cout << "Значение ссылки " << b1 << endl;

    // Объявлена переменная a2 и ей присвоено значение 5   
    int a2 = 5;
    // Объявлена переменная b2 и ей присвоена переменная a2
    int b2 = a2;
    // Вывод значения переменной b2 который равен 5
    cout << "Значение переменной " << b2 << endl;

system("pause");
return 0;
}

Вопрос: объясните пожалуйста разность между ссылкой и простой переменной. Если операции которые выполняет ссылка, можно произвести и с помощью простой переменной. Если только для указания адреса от указателя, но а в целом объясните разность и преимущество перед обычной переменной?

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.