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

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

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

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

19.11.2010, 19:21. Просмотров 11282. Ответов 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
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
19.11.2010, 22:16  [ТС] #16
KuKu, насколько я знаю, нет такого понятия-указатель на ссылку.
Читается такая строчка
C++
1
int*&r=p
вполне однозначно-ссылка на указатель.
0
KuKu
1559 / 1037 / 78
Регистрация: 17.04.2009
Сообщений: 2,995
19.11.2010, 22:21 #17
st_dent, нельзя создавать ссылки без объекта. Создайте ссылку на инт и как это будет выглядеть ?
0
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
19.11.2010, 22:25  [ТС] #18
KuKu, указатель-не объект?
0
KuKu
1559 / 1037 / 78
Регистрация: 17.04.2009
Сообщений: 2,995
19.11.2010, 22:38 #19
Ссылка это объект передаваемый с помощью указателя на него. По-простому - "разыменованный указатель". Но указатель это просто 4 байта, а ссылка всегда указывает на уже созданный объект.
0
silent_1991
Эксперт С++
5005 / 3063 / 149
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
19.11.2010, 22:44 #20
KuKu, я всё обсуждение не читал, но, по-моему, вам хотят сказать следующее:
int *p; - указатель на тип int.
int *&r = p; - ссылка (&r) на указатель (*(&r)) на тип int (int *(&r)). И она инициализируется указателем p, т.е. становится псевдонимом для p - указателя на тип int (который, собственно, уже существует). Т.е. такая ссылка, в контексте сказанного вами, разыменованный указатель на указатель на int.
2
KuKu
1559 / 1037 / 78
Регистрация: 17.04.2009
Сообщений: 2,995
19.11.2010, 22:57 #21
вот тут помедленее
C++
1
int *&r = p; - ссылка (&r) на указатель (*(&r)) на тип int (int *(&r)).
По-моему мне хотят сказать, что так создают ссылку на объект(указатель на инт, но тут это не важно). Вот меня это и удивило, что как можно создать ссылку ? или не так что то понимаю...
0
silent_1991
Эксперт С++
5005 / 3063 / 149
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 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)?
0
KuKu
1559 / 1037 / 78
Регистрация: 17.04.2009
Сообщений: 2,995
20.11.2010, 00:39 #23
Номинально "указатель на инт" и "инт" это просто типы. А можно создать ссылку на инт ? это риторический вопрос (ответ - нет, это на всякий случай). Так как мы тогда создаем ссылку для другого типа(указатель на инт который) ?
0
silent_1991
Эксперт С++
5005 / 3063 / 149
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
20.11.2010, 05:33 #24
Вы же просто к словам придираетесь))) Ладно, буду говорить полностью - ссылку на объект типа указатель на int. Смысл от этого не поменялся.

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

C++
1
int* &r = p;
Т.е. мы создаём ссылку, наше неделимое &r, на объект, имеющий тип int*
Хотя я всегда пишу звёздочку отдельно от типа, но в таких случаях, как видно, всё же помогает написание её слитно с типом (хотя многие и амперсанд при объявлении ссылки пишут слитно с типом, так что это почти холивар).
1
norge_goth
62 / 62 / 7
Регистрация: 27.01.2009
Сообщений: 279
03.12.2010, 00:49 #25
Цитата Сообщение от silent_1991 Посмотреть сообщение
Т.е. мы создаём ссылку, наше неделимое &r, на объект, имеющий тип int*
Хотя я всегда пишу звёздочку отдельно от типа, но в таких случаях, как видно, всё же помогает написание её слитно с типом (хотя многие и амперсанд при объявлении ссылки пишут слитно с типом, так что это почти холивар).
а почему нельзя взять адрес ссылки, если она фактически есть разименованным указателем и если это переменная то у нее должен быть адрес по идеи, или это не переменная?
0
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;
Насколько я понимаю, ссылка не является объектом(и, соответственно адрес самой ссылки получить нельзя). Это некий псевдоним объекта, которым бывает удобней пользоваться.
1
Kastaneda
Jesus loves me
Эксперт С++
4749 / 2953 / 242
Регистрация: 12.12.2009
Сообщений: 7,493
Записей в блоге: 2
Завершенные тесты: 1
03.12.2010, 10:30 #27
Ну так адрес ссылки == адрес объекта. Фактически ссылка это другое имя объекта, поэтому ее можно использовать как объект.
1
Mr.X
Эксперт С++
3060 / 1705 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
03.12.2010, 14:02 #28
Цитата Сообщение от norge_goth Посмотреть сообщение
а почему нельзя взять адрес ссылки, если она фактически есть разименованным указателем и если это переменная то у нее должен быть адрес по идеи, или это не переменная?
Адрес может иметь только объект, а ссылка по определению не объект, а альтернативное имя объекта. Ни один оператор не выполняет действий над ссылкой, так как эти действия выполняются над объектом, на который она ссылается, следовательно адресом ссылки будет адрес этого объекта.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2010, 14:02
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Опции темы

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