Форум программистов, компьютерный форум 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++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 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
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
19.11.2010, 19:59     Ссылка на указатель #4
int* & tmp есть подозрение(хотя могу ошибаться), что нельзя такое создать в принципе. Вы пытаетесь создать ссылку. Ссылка это не указатель, она не может существовать без объекта.
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 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
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
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
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 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
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
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
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
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
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 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
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
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
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
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
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
19.11.2010, 22:38     Ссылка на указатель #19
Ссылка это объект передаваемый с помощью указателя на него. По-простому - "разыменованный указатель". Но указатель это просто 4 байта, а ссылка всегда указывает на уже созданный объект.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2010, 22:44     Ссылка на указатель
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 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     Ссылка на указатель
Ответ Создать тему
Опции темы

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