Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> физич. смысл указателей и ссылкок, в чем заключается физический смысл ссылк 
:(
    Опции темы
Romikgy
Дата 23.12.2008, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 1
Всего: 146



Цитата(mes @  23.12.2008,  13:14 Найти цитируемый пост)
К тому же использование ссылок позволяет компилятору лучше соптимизировать код. 

хм каким образом ?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
mes
Дата 23.12.2008, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Romikgy @  23.12.2008,  14:55 Найти цитируемый пост)

хм каким образом ? 

В том же роде как помогает оптимизации модификатор const.
На протяжении всего блока ссылка не может быть изменена, в отличии от указателя. 




--------------------
PM MAIL WWW   Вверх
GoldFinch
Дата 23.12.2008, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



mes, а вот так есть разница?
Код

__declspec(dllexport) void f(A *pa) {...}
__declspec(dllexport) void f(A&a)  {...}

или даже так?
extern "C" void f(A&a);
...

я возьму этот объектник и подключу в проге на *другом ЯП*, а она-то не знает что есть ссылки и есть указатели)
PM MAIL ICQ   Вверх
mes
Дата 23.12.2008, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(GoldFinch @  23.12.2008,  15:02 Найти цитируемый пост)
mes, а вот так есть разница?

сорри .. упустил нить разговора.. В чем разница ??
Между ссылкой и указателем ?  На уровне объектного кода ни в чем. 
Цитата(GoldFinch @  23.12.2008,  15:02 Найти цитируемый пост)
я возьму этот объектник и подключу в проге на *другом ЯП*, а она-то не знает что есть ссылки и есть указатели) 

Ну и в чем проблема ? 


--------------------
PM MAIL WWW   Вверх
GoldFinch
Дата 23.12.2008, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



mes, я о том что проверять на 0 надо не зависимо от того как передается параметр, по "указателю" или по "ссылке"
PM MAIL ICQ   Вверх
mes
Дата 23.12.2008, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(GoldFinch @  23.12.2008,  17:08 Найти цитируемый пост)
mes, я о том что проверять на 0 надо не зависимо от того как передается параметр, по "указателю" или по "ссылке" 


условно так:
void f(A&a) // проверка осуществлена у клиента // до вызова
void f(A*a) // проверка требуется на сервере // в функции




--------------------
PM MAIL WWW   Вверх
J0ker
Дата 24.12.2008, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



Цитата(GoldFinch @ 23.12.2008,  09:09)
Цитата(Romikgy @  23.12.2008,  00:37 Найти цитируемый пост)
не врите есть указатели в паскале и активно юзаются , а вот ссылок нет , наверное за не надобностью

в паскале нет такого деления, там @var (эквивалентно &var в С(++)) - это указатель

я конечно очень давно писал на паскале... так давно, что уже и не помню как на нем писать, но, ИМХО, ты чет не то вещаешь
в паскале есть и указатели и ссылки
правда ссылки только в качестве формальных аргументов функций, но тем не менее
в паскале просто нельзя создать алиас переменной

Это сообщение отредактировал(а) J0ker - 24.12.2008, 08:07


--------------------
user posted image
PM MAIL   Вверх
Romikgy
Дата 24.12.2008, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 1
Всего: 146



Цитата(J0ker @  24.12.2008,  07:06 Найти цитируемый пост)
правда ссылки только в качестве формальных аргументов функций

примерго

Добавлено через 1 минуту и 16 секунд
Цитата(mes @  23.12.2008,  13:57 Найти цитируемый пост)
На протяжении всего блока ссылка не может быть изменена

не понял почему :( ссылку об этом можно дабы подробнее почитать


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
mes
Дата 24.12.2008, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Romikgy @  24.12.2008,  09:40 Найти цитируемый пост)

примерго

http://www.freepascal.ru/article//freepascal/20070520123650/


Цитата(Romikgy @  24.12.2008,  09:40 Найти цитируемый пост)
не понял почему :( с

в любой книжке по Cpp в разделе где описаны ссылки.  smile 
вот первое что попалось в инете 
Цитата

Ссылка не является переменной. Один раз присвоив значение ссылке, вы уже не можете ее изменить. Кроме того в отличие от указателей вы не можете выполнить  следующие операции над ссылками:

• Вы не можете получить адрес ссылки, используя оператор адреса C++.

• Вы не можете присвоить ссылке указатель.

• Вы не можете сравнить значения ссылок, используя операторы сравнения C++.

• Вы не можете выполнить арифметические операции над ссылкой, например добавить смещение.

•Вы не можете изменить ссылку.




--------------------
PM MAIL WWW   Вверх
SABROG
Дата 24.12.2008, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 1
Всего: 91



Цитата(mes @  24.12.2008,  18:11 Найти цитируемый пост)
Вы не можете получить адрес ссылки, используя оператор адреса C++.

Ссылка - уже адрес. Получение адреса ссылки тоже самое, что и получение адреса объекта.

Цитата(mes @  24.12.2008,  18:11 Найти цитируемый пост)
Вы не можете присвоить ссылке указатель.

Зато можете сделать ссылку на указатель.

Цитата(mes @  24.12.2008,  18:11 Найти цитируемый пост)
Вы не можете сравнить значения ссылок, используя операторы сравнения C++.

Зато можно запихнуть ссылки в указатели и сравнить их.

Цитата(mes @  24.12.2008,  18:11 Найти цитируемый пост)
Вы не можете выполнить арифметические операции над ссылкой, например добавить смещение.

Аналогично. Помещаем ссылку в указатель и добавляем смещение.

Цитата(mes @  24.12.2008,  18:11 Найти цитируемый пост)
Вы не можете изменить ссылку.

Опять же ссылка помещается в указатель и меняется как душе угодно или инициализируется ссылка с другим именем. Есть еще возможность ссылку проинициализировать любым значением (не обязательно адрес) (источник)


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
GoldFinch
Дата 24.12.2008, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



Цитата(SABROG @  24.12.2008,  19:00 Найти цитируемый пост)
Получение адреса ссылки тоже самое

что за бред?! получение адреса ссылки - это то же что "получение адреса числа 1". вот вы можете сказать какой адрес у числа 1?
не путайте переменные с их значениями %)

Это сообщение отредактировал(а) GoldFinch - 24.12.2008, 19:29
PM MAIL ICQ   Вверх
mes
Дата 24.12.2008, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



GoldFinch, поддерживаю.

SABROG, 
Вам говорят: невозможно узнать адрес числовой константы
Вы отвечаетe: запихиваем ее в переменную и получаем адрес. 

Вам говорят: Вы не можете инкрементировать константу.. 
Вы отвечаетe: кладемее значение в переменную и инкрементируем. 
и т.д.
 smile

Добавлено через 1 минуту и 26 секунд
Цитата(SABROG @  24.12.2008,  19:00 Найти цитируемый пост)
Ссылка - уже адрес. Получение адреса ссылки тоже самое, что и получение адреса объекта.

неа .. То же самое что получение адреса адреса.  

Это сообщение отредактировал(а) mes - 24.12.2008, 20:00


--------------------
PM MAIL WWW   Вверх
SABROG
Дата 24.12.2008, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 1
Всего: 91



Цитата(GoldFinch @  24.12.2008,  19:29 Найти цитируемый пост)
что за бред?! получение адреса ссылки - это то же что "получение адреса числа 1". вот вы можете сказать какой адрес у числа 1?
не путайте переменные с их значениями %)

Цитата(mes @  24.12.2008,  20:00 Найти цитируемый пост)
GoldFinch, поддерживаю.
SABROG, 
Вам говорят: невозможно узнать адрес числовой константы
Вы отвечаетe: запихиваем ее в переменную и получаем адрес. 

Я могу сказать какой адрес у числа, если запихнуть его в переменную. Говоря о получении адреса ссылки я имею ввиду, что ссылка - уже адрес и о получении этого адреса таким способом:

Код

#include <iostream>

int main(int argc, char *argv[])
{
    const int &ref = 1;
    std::cout << &ref << std::endl;
    return 0;
}

В подтверждение моих слов, результат программы (она даже скомпилировалась без ошибок ;) )

Код

reference>program
0x22ff74


Цитата(mes @  24.12.2008,  20:00 Найти цитируемый пост)

Вам говорят: Вы не можете инкрементировать константу.. 
Вы отвечаетe: кладемее значение в переменную и инкрементируем. 
и т.д.
 smile


Я все могу. Видоизменяем программу:

Код

#include <iostream>

int main(int argc, char *argv[])
{
    const int &ref = 1;
    std::cout << &ref << std::endl;
    int *p = &const_cast<int &>(ref);
    std::cout << p << std::endl;
    ++p;
    std::cout << p << std::endl;
    return 0;
}


Получаем:

Код

reference>program
0x22ff74
0x22ff74
0x22ff78


Цитата(mes @  24.12.2008,  20:00 Найти цитируемый пост)

неа .. То же самое что получение адреса адреса.  


Я явно получаю адрес адреса (&ref) и в итоге ведь получил просто адрес ссылки объекта, что и вывела в консоль программа.

Это сообщение отредактировал(а) SABROG - 24.12.2008, 22:59


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Romikgy
Дата 24.12.2008, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 1
Всего: 146



Цитата(mes @  24.12.2008,  17:11 Найти цитируемый пост)
http://www.freepascal.ru/article//freepascal/20070520123650/

это не явное использование ссылок , его также можно интерпретировать как передачу указателя, по аналогии с бейсиком (насколько мне помнится бейсик визуал, так в нем нет указателей , но в ф-цию можно передать переменые по ссылке)
Цитата(mes @  24.12.2008,  17:11 Найти цитируемый пост)
в любой книжке по Cpp в разделе где описаны ссылки.  smile 
вот первое что попалось в инете 

если всетаки думать о ссылке как о еще одной названии переменой то все операции которые упомянуты вообще не имеют смысл ибо работають как с самой переменой
Код

• Вы не можете получить адрес ссылки, используя оператор адреса C++.

• Вы не можете сравнить значения ссылок, используя операторы сравнения C++.

а это интересно проверить .... 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
mes
Дата 24.12.2008, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Romikgy @  24.12.2008,  20:39 Найти цитируемый пост)

а это интересно проверить ....  


Цитата(Romikgy @  24.12.2008,  20:39 Найти цитируемый пост)
• Вы не можете получить адрес ссылки, используя оператор адреса C++

оператор вернет адрес объекта, а не ссылки . n- ссылок на один и тот же объект дадут  один  и тот же результат.

Цитата(Romikgy @  24.12.2008,  20:39 Найти цитируемый пост)
 Вы не можете сравнить значения ссылок, используя операторы сравнения C++.

так же .. операция будет проводиться над объектом, а не над самой ссылкой.. 



--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0680 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.