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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 67, средняя оценка - 4.84
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
#1

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

19.11.2010, 19:21. Просмотров 8790. Ответов 27
Метки нет (Все метки)

Почему не работает такая конструкция?
C++
1
2
3
4
5
void SwapInt(void* p1, void* p2)
{
    
    int* & tmp=static_cast<int*>(p2);
}
и как исправить?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1599 / 991 / 117
Регистрация: 27.09.2009
Сообщений: 1,911
Завершенные тесты: 1
19.11.2010, 19:52     Ссылка на указатель #2
А какова цель сего хитроумного преобразования?
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
19.11.2010, 19:57  [ТС]     Ссылка на указатель #3
Nick Alte, то что вы написали до этого выдает ошибку.

Добавлено через 1 минуту
Цитата Сообщение от Nick Alte Посмотреть сообщение
А какова цель сего хитроумного преобразования?
Функция должна менять местами два значения. Думал сделать через ссылку на указатель.
KuKu
 Аватар для KuKu
1552 / 1030 / 73
Регистрация: 17.04.2009
Сообщений: 2,968
19.11.2010, 19:59     Ссылка на указатель #4
int* & tmp есть подозрение(хотя могу ошибаться), что нельзя такое создать в принципе. Вы пытаетесь создать ссылку. Ссылка это не указатель, она не может существовать без объекта.
Nick Alte
Эксперт С++
1599 / 991 / 117
Регистрация: 27.09.2009
Сообщений: 1,911
Завершенные тесты: 1
19.11.2010, 20:02     Ссылка на указатель #5
Объект-то есть, это p2, но преобразование типа произвести так просто не получится, придётся принуждать.
C++
1
    int* &tmp = reinterpret_cast<int* &>(p2);
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
19.11.2010, 20:14  [ТС]     Ссылка на указатель #6
KuKu, можно
C++
1
2
3
4
5
                char c='A';
        char* pc = &c;
        char *&r=pc;
        *r='d'; 
        r++;
Добавлено через 9 минут
Более общий вопрос.
Можно ли каким-то образом узнать тип переменной в функции через указатель?
KuKu
 Аватар для KuKu
1552 / 1030 / 73
Регистрация: 17.04.2009
Сообщений: 2,968
19.11.2010, 20:47     Ссылка на указатель #7
у стандартных типов указатель 4 байта("обычно") и по нему, вродь как, нельзя определить что за тип.

Добавлено через 14 минут
C++
1
2
3
4
5
 char c='A';
                char* pc = &c;
                char *&r=pc;
                *r='d'; 
                r++;
Тут кто в ссылках шарит ответьте плз
char *&r - это же все таки указатель на ссылку, а не наоборот ? (вобще разница же есть?) По идее же указатель на ссылку это же тоже самое, что указатель на объект ? и почему компилятор не ругается на
C++
1
cout << (*&r) << endl;
Kastaneda
Форумчанин
Эксперт С++
 Аватар для Kastaneda
4253 / 2785 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
19.11.2010, 20:54     Ссылка на указатель #8
Цитата Сообщение от KuKu Посмотреть сообщение
у стандартных типов указатель 4 байта("обычно")
Пока адресация будет происходить 4х байтовыми регистрами, все указатели будут размером 4 байта)

Добавлено через 6 минут
Цитата Сообщение от KuKu Посмотреть сообщение
char *&r - это же все таки указатель на ссылку, а не наоборот ?
Скорее наоборот.)
и почему компилятор не ругается на
C++
1
cout << (*&r)<< endl;
Могу предположить, что выводится адрес?
Конструкцию "(*&r)" я бы описал словами так: адрес того, что назодится по адресу r, т.е. фактически то же самое, что cout << r;
KuKu
 Аватар для KuKu
1552 / 1030 / 73
Регистрация: 17.04.2009
Сообщений: 2,968
19.11.2010, 20:56     Ссылка на указатель #9
Цитата Сообщение от Kastaneda Посмотреть сообщение
Скорее наоборот.)
Тогда у мя малый ступор. Как можно создать ссылку без объекта ?
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
19.11.2010, 21:02  [ТС]     Ссылка на указатель #10
KuKu, объект есть - указатель на объект. Синтаксически такой ссылкой пользуемся также, как и указателем.
KuKu
 Аватар для KuKu
1552 / 1030 / 73
Регистрация: 17.04.2009
Сообщений: 2,968
19.11.2010, 21:05     Ссылка на указатель #11
какой объект ? ссылка без существующего объекта быть не может, а мы создаем переменную ссылку.
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
19.11.2010, 21:17  [ТС]     Ссылка на указатель #12
KuKu, объект есть - указатель.
C++
1
2
3
int n;
int*p=&n;
int*&r=p;
ссылаемся на указатель(объект), который содержит адрес другого объекта.
а вот так будет ошибка:
C++
1
int*&ref=&n;
т.к. справа не объект-указатель, а выражение для вычисления адреса.
Kastaneda
Форумчанин
Эксперт С++
 Аватар для Kastaneda
4253 / 2785 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
19.11.2010, 21:37     Ссылка на указатель #13
st_dent, а почему бы не воспользоватся шаблоном для решения вашей проблемы?
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
19.11.2010, 21:51  [ТС]     Ссылка на указатель #14
Kastaneda, Это часть лабораторной работы на тему "Указатели на функции". Пользоваться шаблоном в данном случае нельзя.
KuKu
 Аватар для KuKu
1552 / 1030 / 73
Регистрация: 17.04.2009
Сообщений: 2,968
19.11.2010, 22:11     Ссылка на указатель #15
st_dent, мы о разном. int*&r=p; я говорю, что это указатель на ссылку(и вопросы были соответствующие), а не наоборот, а вы мне про то что такое указатель.
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
19.11.2010, 22:16  [ТС]     Ссылка на указатель #16
KuKu, насколько я знаю, нет такого понятия-указатель на ссылку.
Читается такая строчка
C++
1
int*&r=p
вполне однозначно-ссылка на указатель.
KuKu
 Аватар для KuKu
1552 / 1030 / 73
Регистрация: 17.04.2009
Сообщений: 2,968
19.11.2010, 22:21     Ссылка на указатель #17
st_dent, нельзя создавать ссылки без объекта. Создайте ссылку на инт и как это будет выглядеть ?
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
19.11.2010, 22:25  [ТС]     Ссылка на указатель #18
KuKu, указатель-не объект?
KuKu
 Аватар для KuKu
1552 / 1030 / 73
Регистрация: 17.04.2009
Сообщений: 2,968
19.11.2010, 22:38     Ссылка на указатель #19
Ссылка это объект передаваемый с помощью указателя на него. По-простому - "разыменованный указатель". Но указатель это просто 4 байта, а ссылка всегда указывает на уже созданный объект.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2010, 22:44     Ссылка на указатель
Еще ссылки по теме:

Указатель или ссылка на указатель. В чем разница? C++
C++ Ссылка на указатель
C++ Ссылка на указатель на указатель
C++ Указатель/ссылка в параметре функции
Ссылка(указатель) на вектор C++

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт С++
4949 / 3025 / 149
Регистрация: 11.11.2009
Сообщений: 7,025
Завершенные тесты: 1
19.11.2010, 22:44     Ссылка на указатель #20
KuKu, я всё обсуждение не читал, но, по-моему, вам хотят сказать следующее:
int *p; - указатель на тип int.
int *&r = p; - ссылка (&r) на указатель (*(&r)) на тип int (int *(&r)). И она инициализируется указателем p, т.е. становится псевдонимом для p - указателя на тип int (который, собственно, уже существует). Т.е. такая ссылка, в контексте сказанного вами, разыменованный указатель на указатель на int.
Yandex
Объявления
19.11.2010, 22:44     Ссылка на указатель
Ответ Создать тему
Опции темы

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