Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.99/104: Рейтинг темы: голосов - 104, средняя оценка - 4.99
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
1

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

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

Author24 — интернет-сервис помощи студентам
Почему не работает такая конструкция?
C++
1
2
3
4
5
void SwapInt(void* p1, void* p2)
{
    
    int* & tmp=static_cast<int*>(p2);
}
и как исправить?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2010, 19:21
Ответы с готовыми решениями:

Указатель или ссылка на указатель. В чем разница?
Есть вопрос про указатели и ссылки на указатели :scratch: Хочу в функциях f1() и в f2()...

Ссылка на указатель на указатель
void TEST( int **&amp;refptr, int const &amp;N); int main() { int const N = 10; int i{ 0 }, b{ 2 },...

Указатель и ссылка
Почему выгодней использовать указатель а не ссылку при использовании массивов?

Указатель и ссылка
В общем вопрос достаточно простой, в чём разница указателя и сылки? С одной стороны указатель это...

27
Эксперт С++
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
19.11.2010, 19:52 2
А какова цель сего хитроумного преобразования?
0
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
19.11.2010, 19:57  [ТС] 3
Nick Alte, то что вы написали до этого выдает ошибку.

Добавлено через 1 минуту
Цитата Сообщение от Nick Alte Посмотреть сообщение
А какова цель сего хитроумного преобразования?
Функция должна менять местами два значения. Думал сделать через ссылку на указатель.
0
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
19.11.2010, 19:59 4
int* & tmp есть подозрение(хотя могу ошибаться), что нельзя такое создать в принципе. Вы пытаетесь создать ссылку. Ссылка это не указатель, она не может существовать без объекта.
0
Эксперт С++
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
19.11.2010, 20:02 5
Объект-то есть, это p2, но преобразование типа произвести так просто не получится, придётся принуждать.
C++
1
    int* &tmp = reinterpret_cast<int* &>(p2);
1
64 / 64 / 12
Регистрация: 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 минут
Более общий вопрос.
Можно ли каким-то образом узнать тип переменной в функции через указатель?
0
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
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;
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,116
Записей в блоге: 2
19.11.2010, 20:54 8
Цитата Сообщение от KuKu Посмотреть сообщение
у стандартных типов указатель 4 байта("обычно")
Пока адресация будет происходить 4х байтовыми регистрами, все указатели будут размером 4 байта)

Добавлено через 6 минут
Цитата Сообщение от KuKu Посмотреть сообщение
char *&r - это же все таки указатель на ссылку, а не наоборот ?
Скорее наоборот.)
и почему компилятор не ругается на
C++
1
cout << (*&r)<< endl;
Могу предположить, что выводится адрес?
Конструкцию "(*&r)" я бы описал словами так: адрес того, что назодится по адресу r, т.е. фактически то же самое, что cout << r;
0
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
19.11.2010, 20:56 9
Цитата Сообщение от Kastaneda Посмотреть сообщение
Скорее наоборот.)
Тогда у мя малый ступор. Как можно создать ссылку без объекта ?
0
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
19.11.2010, 21:02  [ТС] 10
KuKu, объект есть - указатель на объект. Синтаксически такой ссылкой пользуемся также, как и указателем.
0
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
19.11.2010, 21:05 11
какой объект ? ссылка без существующего объекта быть не может, а мы создаем переменную ссылку.
0
64 / 64 / 12
Регистрация: 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;
т.к. справа не объект-указатель, а выражение для вычисления адреса.
2
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,116
Записей в блоге: 2
19.11.2010, 21:37 13
st_dent, а почему бы не воспользоватся шаблоном для решения вашей проблемы?
0
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
19.11.2010, 21:51  [ТС] 14
Kastaneda, Это часть лабораторной работы на тему "Указатели на функции". Пользоваться шаблоном в данном случае нельзя.
0
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
19.11.2010, 22:11 15
st_dent, мы о разном. int*&r=p; я говорю, что это указатель на ссылку(и вопросы были соответствующие), а не наоборот, а вы мне про то что такое указатель.
0
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
19.11.2010, 22:16  [ТС] 16
KuKu, насколько я знаю, нет такого понятия-указатель на ссылку.
Читается такая строчка
C++
1
int*&r=p
вполне однозначно-ссылка на указатель.
0
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
19.11.2010, 22:21 17
st_dent, нельзя создавать ссылки без объекта. Создайте ссылку на инт и как это будет выглядеть ?
0
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
19.11.2010, 22:25  [ТС] 18
KuKu, указатель-не объект?
0
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
19.11.2010, 22:38 19
Ссылка это объект передаваемый с помощью указателя на него. По-простому - "разыменованный указатель". Но указатель это просто 4 байта, а ссылка всегда указывает на уже созданный объект.
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
19.11.2010, 22:44 20
KuKu, я всё обсуждение не читал, но, по-моему, вам хотят сказать следующее:
int *p; - указатель на тип int.
int *&r = p; - ссылка (&r) на указатель (*(&r)) на тип int (int *(&r)). И она инициализируется указателем p, т.е. становится псевдонимом для p - указателя на тип int (который, собственно, уже существует). Т.е. такая ссылка, в контексте сказанного вами, разыменованный указатель на указатель на int.
2
19.11.2010, 22:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2010, 22:44
Помогаю со студенческими работами здесь

Ссылка на указатель
Задам, скорее всего, глупый вопрос, однако хотелось бы разобраться. // ... { int *ptr =...

Указатель и ссылка
Помогите понять, немного запутался. #include&lt;iostream&gt; using namespace std; void ch1 (int...

Ссылка на указатель
Привет всем, пишу класс реализующий стек, объявил вершину стека как приватный элемент. Написал...

Ссылка на указатель на константу
Добрый вечер! Не подскажите почему только выражение с pi_ref3 верное, а остальные - нет (VS...

Ссылка(указатель) на вектор
Добрый день! Немного загнался по поводу вроде простого кода: int main(){ vector&lt;int&gt; vct;...

Ссылка на указатель на константу
Подскажите почему неверна конструкция int *k=new int(10); int const* &amp;t=k; //неверно...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru