User 59241
Ваш вопрос :
Цитата:
Можно ли инициализировать ссылочную переменную переменной-указателем?
Да, мы можем: ваш код демонстрирует это.
Следующая вещь-это "
Цитата:
и то, и другое должно было иметь одинаковую ценность. Почему они разные?
Вывод правильный. Именно поэтому мы используем указатели.
Указатели - Учебники По C++ [
^]
int main()
{
Base b1(5);
Base *b3 = &b1; // Create pointer b3 and set to point to b1 b3->a==5
Base &b2 = *b3; // Create reference b2 and inititialize to whatever b3 points to which is b1
// NOTE at this line *b3 dereferences b3 which results in b1. If b3 did not point to a valid object (eg b3==NULL) this would cause the next line to fail at runtime
b2.geta();
b3->geta();
Base b4(10);
b3 = &b4; // Now point b3 to b4 b3->a == 10
cout << "a=" << b3->a << endl;
b2.geta();
b3->geta();
return 0;
}
Вы устанавливаете указатель b3, чтобы указать на b1, но позже вы устанавливаете его, чтобы указать на b4. Таким образом, выход правильный.
Вы можете посмотреть, что происходит, используя ваш debubugger.
GeekyMukesh
Спасибо pwasser, за ответ и подробное объяснение.
Просто хотел добавить информацию о том, что мы должны избегать назначения нулевого указателя на ссылку, как показано ниже:
int *p=0;
int &q = *p;
Этот код будет компилироваться, но результат будет очень неожиданным, может быть ошибка сегментации.
[no name]
Спасибо за комментарий. Однако ваша точка зрения уже упомянута:
Цитата: // примечание в этой строке *b3 разыменовывает b3, что приводит к b1. Если b3 не указывает на допустимый объект (например, b3==NULL), это приведет к сбою следующей строки во время выполнения