Форум программистов, компьютерный форум CyberForum.ru

Ссылка на указатель - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 67, средняя оценка - 4.84
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
19.11.2010, 19:21     Ссылка на указатель #1
Почему не работает такая конструкция?
C++
1
2
3
4
5
void SwapInt(void* p1, void* p2)
{
    
    int* & tmp=static_cast<int*>(p2);
}
и как исправить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2010, 19:21     Ссылка на указатель
Посмотрите здесь:

C++ Ссылка на указатель
C++ Указатель и ссылка
C++ Ссылка на указатель в аргументе функции
C++ Указатель и ссылка
Указатель и ссылка C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,945
19.11.2010, 22:57     Ссылка на указатель #21
вот тут помедленее
C++
1
int *&r = p; - ссылка (&r) на указатель (*(&r)) на тип int (int *(&r)).
По-моему мне хотят сказать, что так создают ссылку на объект(указатель на инт, но тут это не важно). Вот меня это и удивило, что как можно создать ссылку ? или не так что то понимаю...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
20.11.2010, 00:00     Ссылка на указатель #22
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
int main()
{
    int a = 10;
    int *p = &a;
    int *&r = p;
 
    std::cout << a << std::endl
              << *p << std::endl
              << *r << std::endl
              << p << std::endl
              << r << std::endl;
 
    std::cin.get();
    return 0;
}
Добавлено через 1 минуту
Когда вы пишите int *p - вы создаёте указательна тип int. Кто запрещает создать не указатель на int, а ссылку на указатель на int (т.е. вместо p в той же конструкции написать &r)?
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,945
20.11.2010, 00:39     Ссылка на указатель #23
Номинально "указатель на инт" и "инт" это просто типы. А можно создать ссылку на инт ? это риторический вопрос (ответ - нет, это на всякий случай). Так как мы тогда создаем ссылку для другого типа(указатель на инт который) ?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
20.11.2010, 05:33     Ссылка на указатель #24
Вы же просто к словам придираетесь))) Ладно, буду говорить полностью - ссылку на объект типа указатель на int. Смысл от этого не поменялся.

Добавлено через 9 минут
А в каком смысле как? Я же показал, как, в своём предыдущем посте. Может так лучше будет понятна семантика объявления:

C++
1
int* &r = p;
Т.е. мы создаём ссылку, наше неделимое &r, на объект, имеющий тип int*
Хотя я всегда пишу звёздочку отдельно от типа, но в таких случаях, как видно, всё же помогает написание её слитно с типом (хотя многие и амперсанд при объявлении ссылки пишут слитно с типом, так что это почти холивар).
norge_goth
62 / 62 / 7
Регистрация: 27.01.2009
Сообщений: 279
03.12.2010, 00:49     Ссылка на указатель #25
Цитата Сообщение от silent_1991 Посмотреть сообщение
Т.е. мы создаём ссылку, наше неделимое &r, на объект, имеющий тип int*
Хотя я всегда пишу звёздочку отдельно от типа, но в таких случаях, как видно, всё же помогает написание её слитно с типом (хотя многие и амперсанд при объявлении ссылки пишут слитно с типом, так что это почти холивар).
а почему нельзя взять адрес ссылки, если она фактически есть разименованным указателем и если это переменная то у нее должен быть адрес по идеи, или это не переменная?
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
03.12.2010, 01:20  [ТС]     Ссылка на указатель #26
norge_goth, своего адреса нет.
Но операцию взятия адреса можно осуществить:
C++
1
2
3
4
    int a=0;
    int&r=a;
    int*p_r=&r;    //заносится адрес переменной а
    int*p_a=&a;
Насколько я понимаю, ссылка не является объектом(и, соответственно адрес самой ссылки получить нельзя). Это некий псевдоним объекта, которым бывает удобней пользоваться.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
03.12.2010, 10:30     Ссылка на указатель #27
Ну так адрес ссылки == адрес объекта. Фактически ссылка это другое имя объекта, поэтому ее можно использовать как объект.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2010, 14:02     Ссылка на указатель
Еще ссылки по теме:

C++ Ссылка на указатель
C++ Ссылка на указатель на указатель
C++ Указатель/ссылка в параметре функции

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Mr.X
Эксперт С++
 Аватар для Mr.X
2798 / 1574 / 246
Регистрация: 03.05.2010
Сообщений: 3,651
03.12.2010, 14:02     Ссылка на указатель #28
Цитата Сообщение от norge_goth Посмотреть сообщение
а почему нельзя взять адрес ссылки, если она фактически есть разименованным указателем и если это переменная то у нее должен быть адрес по идеи, или это не переменная?
Адрес может иметь только объект, а ссылка по определению не объект, а альтернативное имя объекта. Ни один оператор не выполняет действий над ссылкой, так как эти действия выполняются над объектом, на который она ссылается, следовательно адресом ссылки будет адрес этого объекта.
Yandex
Объявления
03.12.2010, 14:02     Ссылка на указатель
Ответ Создать тему
Опции темы

Текущее время: 02:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru