crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Использование ссылок или указателей или вообще без них
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Tonal Дата 18.3.2008, 8:49
  Собственно, кардинальное различие в том, что указатель всегда имеет "свою" память и язык позволяет получить на неё указатель.
А ссылка не обязана иметь свою память, и средствами языка ты не можешь узнать имеет или нет. :)

Какие-то манипуляции со ссылкой в языке всегда эквивалентны операциям над объектом которым она инициализирована.
И в языке нет прямого способа манипулировать чем-то, что-бы было ссылкой. :)
Tonal Дата 18.3.2008, 8:45
 
Цитата(0xF @ 18.3.2008, 2:28) *
Во-вторых, как это "псевдоним"? Внутри это такой же адрес... Выходит, что ссылка - такой же указатель, который не может указывать в никуда, а только на нужную область памяти(там где переменная хранится) + немного другой синтаксис(не надо разыменовывать, чтоб сделать выборку значения, как при работе с указателями)

Ссылка может быть, а может и не быть странслирована в указатель.
Например, если ссылка находится в локальной зоне видимости, нормальный компилятор просто не будет заводить для неё отдельную ячейку памяти (см. например, приведённый тобой код). :rolleyes:
То же самое с подставляемыми (inline) функциями.
Для временных объектов ссылка может вполне не быть указателем, а именно обозначать сам объект:
struct base_t {};
struct derived_t : base_t {};

int main() {
  const base_t& obj = derived_t();
}

В этом случае, obj может трактоваться компилятором так же, как если бы было объявлено const derived_t obj.
Смысла нет заводить здесь ещё и указатель. :rolleyes:
Novak Дата 17.3.2008, 23:40
  Имхо, может по сути ссылки и указатели близки. Но вещи всеже разные, главное отличие в предназначении. Ссылки, как было сказано выше - псевдонимы переменных. Указатели же используются несколько шире, чем просто псевдонимы.
Не возьмусь судить о реализации в компиляторах, но вещи эти именно семантически, с точки зрения языка различны.
Litkevich Yuriy Дата 17.3.2008, 23:33
 
Цитата
даже не соберется

я его для того и привел, что ее инициализировать ее обязательно, а ссылка, может по праву считатся псевдонимом, если говорить я зыком литературным
т.к. в указаном примере n будет равна 100, а rn ее псевдоним
0xF Дата 17.3.2008, 23:28
 
Цитата(Litkevich Yuriy)
если я правильнопонимаю Си, то ссылка и указатель разные вещи:
указатель - переменная содержащая адрес, может указыват в никуда;
ссылка - псевдоним конкретной переменной, неможет указыват в никуда, т.е. всегда инициализируется конкретным значением;

Во-первых, в С нету ссылок, они появились только в С++
Во-вторых, как это "псевдоним"? Внутри это такой же адрес... Выходит, что ссылка - такой же указатель, который не может указывать в никуда, а только на нужную область памяти(там где переменная хранится) + немного другой синтаксис(не надо разыменовывать, чтоб сделать выборку значения, как при работе с указателями)

Ну и плюс ко всему, ссылка обязательно должна быть инициализирована, так что твой код(int n = 1; int &rn;) даже не соберется :)

Цитата(Admin)
int n = 1;
int &rn = n;
if( true)
{
int x = 100;
rn=x;
}
// Чему равна rn?

rn по-прежнему ссылается на n, а n тепер равна 100 :)
Litkevich Yuriy Дата 17.3.2008, 22:28
  в твоем примере она всегда инициализирована, нет момента когда она показывает в никуда
мало того n тоже равна 100, а точнее именно n, а не rn, это лишь псевдоним n
Admin Дата 17.3.2008, 22:13
  Так не может быть, а так как я показал может быть, но вроде как инициализированная, а вроде как нет. :)
Litkevich Yuriy Дата 17.3.2008, 22:11
  как я понимаю x'у
я имел ввиду следующий код:
int n = 1;
int &rn;

неинициализированная ссылка
Admin Дата 17.3.2008, 22:03
 
Цитата(Litkevich Yuriy @ 17.3.2008, 21:12) *
ссылка - псевдоним конкретной переменной, неможет указыват в никуда, т.е. всегда инициализируется конкретным значением;
Да ладно, а как тебе такой код:
int n = 1;
int &rn = n;
if( true)
{
   int x = 100;
   rn=x;
}
// Чему равна rn?
:)
Litkevich Yuriy Дата 17.3.2008, 21:12
  если я правильнопонимаю Си, то ссылка и указатель разные вещи:
указатель - переменная содержащая адрес, может указыват в никуда;
ссылка - псевдоним конкретной переменной, неможет указыват в никуда, т.е. всегда инициализируется конкретным значением;

вроде так
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 5.7.2025, 0:39