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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 5.00
Aaxenon
Light Knight
106 / 29 / 3
Регистрация: 03.06.2010
Сообщений: 361
#1

Указатели - C++

29.12.2010, 12:56. Просмотров 1633. Ответов 37
Метки нет (Все метки)

нашел у Страуструпа вот такую функцию:
C++
1
2
3
4
5
6
void swap(int *p, int *q)
{
int t = *p;
*p = *q;
*q = t;
}
зачем здесь указатели, почему нельзя просто использовать переменные?и вообще для чего используются указатели, в чем необходимость их использования?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2010, 12:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Указатели (C++):

Указатели и указатели на указатели, а также типы данных - C++
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно. Накачал литературы, буду изучать) Щас...

Через указатели на указатели посчитать сумму двух чисел и записать в третье - C++
1. Через указатели на указатели посчитать сумму двух чисел и записать в третье. 2. Написать примитивный калькулятор, пользуясь только...

Есть три переменные. Используя указатели на указатели, поменять значение максимальной и минимальной переменной - C++
Мой код. #include <iostream> #include <stdlib.h> #include<iomanip> using namespace std; void min_max(int*pa, int*pb,...

Указатели на указатели с числами. Почему можно присвоить число в 4-ый элемент, если массив из 2 элементов? - C++
Есть массив int **mas; mas=new int*; // выделил место под пять строк, верно ? mas=new int;// выделил для первой строки матрицы два...

Отсортировать массив и вывести на экран (массивы и указатели на указатели) - C++
Даны массивы F-фамилий студентов и S-результаты сессии (5 оценок) , причем s- результат сессии F студента. Отсортировать массив S по...

Указатели на слонов или А зачем нужны указатели? - C++
Знаю что таких вопросов было уйма, но я так и не нашел ответа на свой вопрос. Для чего нужны указатели? Что такое указатели я знаю, это...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
29.12.2010, 13:35 #16
yanyk1n, По ссылке там построено.

C++
1
2
3
4
5
std::ostream& operator(std::ostream& os, const MyClass& Ob)
{
    os<<Ob.a<<'\n';
    return os;
}
Добавлено через 1 минуту
taras atavin, Константная ссылка дает довольно много... В отличии от передачи параметра по значению, передеча параметра по константной ссылке подразумевает во первых неизменение значения, во-вторых передачу только ссылки на объект.
1
yanyk1n
4329 / 1460 / 152
Регистрация: 12.03.2009
Сообщений: 5,310
29.12.2010, 13:35 #17
ForEveR, я вот только не совсем понял этого... А что мешает вернуть указатель на объект os?
1
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
29.12.2010, 13:36 #18
yanyk1n, Да ничего по сути... Но придеться возвращать тогда по-другому. Разве нет?
1
Nameless One
Эксперт С++
5773 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
29.12.2010, 13:38 #19
Цитата Сообщение от yanyk1n Посмотреть сообщение
А что мешает вернуть указатель на объект os?
Если возвращать по указателю, то его перед использованием нужно будет предварительно разыменовать
1
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
29.12.2010, 13:38 #20
Цитата Сообщение от yanyk1n Посмотреть сообщение
А как же возвращение значения по ссылке?
А ты не путай интерфейс со внутренней реализацией. В том числе, если ты сам делаешь динамический контейнер, то и возись с указателями. Возврат же значения по ссылке не имеет ни какого отношения к обеспечению динамичности самого контейнера. Это доступ к элементу, а не организация их множества. Если ты сделал контейнер на указателях, то читать/писать конкретный элемент без изменения именно в этот момент их общего количества можно и по ссылке. Но ты сначала сделай контейнер. А если это чужой контейнер, то тебе достаточно его интерфейса, причём, он может быть сделан на функциях set/get, работающих со значениями.
1
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
29.12.2010, 13:42 #21
yanyk1n, Я так понимаю ты имеешь ввиду вот это. Одна проблема - я немного не представляю как его разыменовать)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
 
class Object
{
public:
    Object():a(0)
    {
    }
    int GetA() const
    {
        return a;
    }
private:
    int a;
};
 
std::ostream* operator <<(std::ostream& os, const Object& Ob)
{
    os<<Ob.GetA()<<'\n';
    return &os;
}
 
int main()
{
    Object Ob;
    std::cout<<Ob<<'\n';
    return 0;
}
1
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
29.12.2010, 13:43 #22
Цитата Сообщение от ForEveR Посмотреть сообщение
В отличии от передачи параметра по значению, передеча параметра по константной ссылке подразумевает во первых неизменение значения, во-вторых передачу только ссылки на объект.
Передача по значению даёт его неизменение. А передача только ссылки вместо самого объекта преследует цель сократить стековые операции и избежать лишних вызовов конструкторов/деструкторов. Так вот, это задача оптимизации, а ни как не разработки. Сделай оптимизатор, который будет подставлять константные ссылки вместо больших объектов - принесёшь пользу. А в явном виде такие ссылки вредны. Я уже наткнулся на сложности сравнения полей объектов, переданных по константным ссылкам.
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
29.12.2010, 13:44 #23
taras atavin, Не могу с тобой согласиться на тему вредности таких ссылок.

C++
1
2
3
4
    bool operator>(const _Myt& _Right) const
        {   // test if this > _Right
        return (_Right < *this);
        }
Реализацию STL писали плохие люди?
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
29.12.2010, 13:47 #24
Я пытался их юзить, так при каждом доступе к полю пришлось втыкать приведение к типу обычной ссылки. Ну и какова польза? Или хотя бы что нейтрального в этой возне?
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
29.12.2010, 13:48 #25
taras atavin, При доступе - не придется. Придется только при изменении, что логично и лучше такого не делать.
0
Nameless One
Эксперт С++
5773 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
29.12.2010, 13:50 #26
Насчет того, как можно заменить возвращение по ссылке на возвращение по указателю:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
class A
{
    int a;
public:
    A(int _a) : a(_a) {}
    
    friend std::ostream* operator << (std::ostream& os, const A& rhs)
    {
        os << rhs.a;
        return &os;
    }
};
 
int main()
{
    A foo(1), bar(2);
    (*(*(std::cout << foo) << bar)) << std::endl;
    return 0;
}
2
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
29.12.2010, 13:51 #27
Nameless One, Пасиба. Я до такого изврата как-то не додумался)
0
yanyk1n
4329 / 1460 / 152
Регистрация: 12.03.2009
Сообщений: 5,310
29.12.2010, 13:53 #28
Nameless One, спасибо=) теперь стала очевидна польза возврата по ссылке
0
oxotnik
29.12.2010, 14:21
  #29

Не по теме:

За последние N месяцев это единственная нормальная тема, в разделе С++, за что автору респект и уважуха.

0
Nameless One
29.12.2010, 14:23     Указатели
  #30

Не по теме:

Цитата Сообщение от oxotnik Посмотреть сообщение
За последние N месяцев это единственная нормальная тема, в разделе С++, за что автору респект и уважуха.
ответ на вопрос, заданный в этой теме, можно найти в любой книжке по С/С++. Я думаю, даже в самоучителях для чайников...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2010, 14:23
Привет! Вот еще темы с ответами:

Написать программу сортировки через указатели на указатели - C++
Вот моя программа #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string&gt; using namespace std; //Сортировка &quot;пузырьком&quot;. ...

Используются ли на практике указатели на указатели объектов? - C++
Имеются ввиду указатели именно на объекты, а не динамические массивы. Например такой: Object** obj; А как насчёт такого: Object***...

Указатели на массивы. Указатели и функции - C++
Вот задача: Даны два массива : А и B. Необходимо создать третий массив, в котором нужно собрать: -Элементы обоих массивов; -Общие...

Константные указатели и указатели на константу - C++
Чем они, собственно говоря, отличаются? Поясните, пожалуйста. Не знаю, как так получилось, что в разных источниках - разные...


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

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

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