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

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

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

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

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

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

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

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

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

Ссылка на указатель - C++
Задам, скорее всего, глупый вопрос, однако хотелось бы разобраться. // ... { int *ptr = new int; int &amp;x = *ptr; } ...

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

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

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

Добавлено через 1 минуту
Цитата Сообщение от Nick Alte Посмотреть сообщение
А какова цель сего хитроумного преобразования?
Функция должна менять местами два значения. Думал сделать через ссылку на указатель.
0
KuKu
1558 / 1036 / 78
Регистрация: 17.04.2009
Сообщений: 2,987
19.11.2010, 19:59 #4
int* & tmp есть подозрение(хотя могу ошибаться), что нельзя такое создать в принципе. Вы пытаетесь создать ссылку. Ссылка это не указатель, она не может существовать без объекта.
0
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
19.11.2010, 20:02 #5
Объект-то есть, это p2, но преобразование типа произвести так просто не получится, придётся принуждать.
C++
1
    int* &tmp = reinterpret_cast<int* &>(p2);
1
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 минут
Более общий вопрос.
Можно ли каким-то образом узнать тип переменной в функции через указатель?
0
KuKu
1558 / 1036 / 78
Регистрация: 17.04.2009
Сообщений: 2,987
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
Kastaneda
Форумчанин
Эксперт С++
4655 / 2863 / 228
Регистрация: 12.12.2009
Сообщений: 7,276
Записей в блоге: 2
Завершенные тесты: 1
19.11.2010, 20:54 #8
Цитата Сообщение от KuKu Посмотреть сообщение
у стандартных типов указатель 4 байта("обычно")
Пока адресация будет происходить 4х байтовыми регистрами, все указатели будут размером 4 байта)

Добавлено через 6 минут
Цитата Сообщение от KuKu Посмотреть сообщение
char *&r - это же все таки указатель на ссылку, а не наоборот ?
Скорее наоборот.)
и почему компилятор не ругается на
C++
1
cout << (*&r)<< endl;
Могу предположить, что выводится адрес?
Конструкцию "(*&r)" я бы описал словами так: адрес того, что назодится по адресу r, т.е. фактически то же самое, что cout << r;
0
KuKu
1558 / 1036 / 78
Регистрация: 17.04.2009
Сообщений: 2,987
19.11.2010, 20:56 #9
Цитата Сообщение от Kastaneda Посмотреть сообщение
Скорее наоборот.)
Тогда у мя малый ступор. Как можно создать ссылку без объекта ?
0
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
19.11.2010, 21:02  [ТС] #10
KuKu, объект есть - указатель на объект. Синтаксически такой ссылкой пользуемся также, как и указателем.
0
KuKu
1558 / 1036 / 78
Регистрация: 17.04.2009
Сообщений: 2,987
19.11.2010, 21:05 #11
какой объект ? ссылка без существующего объекта быть не может, а мы создаем переменную ссылку.
0
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;
т.к. справа не объект-указатель, а выражение для вычисления адреса.
2
Kastaneda
Форумчанин
Эксперт С++
4655 / 2863 / 228
Регистрация: 12.12.2009
Сообщений: 7,276
Записей в блоге: 2
Завершенные тесты: 1
19.11.2010, 21:37 #13
st_dent, а почему бы не воспользоватся шаблоном для решения вашей проблемы?
0
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
19.11.2010, 21:51  [ТС] #14
Kastaneda, Это часть лабораторной работы на тему "Указатели на функции". Пользоваться шаблоном в данном случае нельзя.
0
KuKu
1558 / 1036 / 78
Регистрация: 17.04.2009
Сообщений: 2,987
19.11.2010, 22:11 #15
st_dent, мы о разном. int*&r=p; я говорю, что это указатель на ссылку(и вопросы были соответствующие), а не наоборот, а вы мне про то что такое указатель.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2010, 22:11
Привет! Вот еще темы с ответами:

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

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

Ссылка на функцию класса (не указатель) - C++
можно ли делать ссылки на функции класса? например класс: class cdPolygon2D : public draw { public: ...

Ссылка на указатель в аргументе функции - C++
при изучении примеров реализации бинарного дерева(в функции добавления нового узла)я увидел,что есть как такой вариант,когда аргумент...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
19.11.2010, 22:11
Ответ Создать тему
Опции темы

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