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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 5.00
Aaxenon
Light Knight
 Аватар для Aaxenon
106 / 29 / 3
Регистрация: 03.06.2010
Сообщений: 361
29.12.2010, 12:56     Указатели #1
нашел у Страуструпа вот такую функцию:
C++
1
2
3
4
5
6
void swap(int *p, int *q)
{
int t = *p;
*p = *q;
*q = t;
}
зачем здесь указатели, почему нельзя просто использовать переменные?и вообще для чего используются указатели, в чем необходимость их использования?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2010, 12:56     Указатели
Посмотрите здесь:

C++ Указатели
Указатели.... C++
C++ Указатели
Указатели C++
Указатели. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
29.12.2010, 13:43     Указатели #22
Цитата Сообщение от ForEveR Посмотреть сообщение
В отличии от передачи параметра по значению, передеча параметра по константной ссылке подразумевает во первых неизменение значения, во-вторых передачу только ссылки на объект.
Передача по значению даёт его неизменение. А передача только ссылки вместо самого объекта преследует цель сократить стековые операции и избежать лишних вызовов конструкторов/деструкторов. Так вот, это задача оптимизации, а ни как не разработки. Сделай оптимизатор, который будет подставлять константные ссылки вместо больших объектов - принесёшь пользу. А в явном виде такие ссылки вредны. Я уже наткнулся на сложности сравнения полей объектов, переданных по константным ссылкам.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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 писали плохие люди?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
29.12.2010, 13:47     Указатели #24
Я пытался их юзить, так при каждом доступе к полю пришлось втыкать приведение к типу обычной ссылки. Ну и какова польза? Или хотя бы что нейтрального в этой возне?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.12.2010, 13:48     Указатели #25
taras atavin, При доступе - не придется. Придется только при изменении, что логично и лучше такого не делать.
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
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;
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.12.2010, 13:51     Указатели #27
Nameless One, Пасиба. Я до такого изврата как-то не додумался)
yanyk1n
 Аватар для yanyk1n
4324 / 1455 / 152
Регистрация: 12.03.2009
Сообщений: 5,310
29.12.2010, 13:53     Указатели #28
Nameless One, спасибо=) теперь стала очевидна польза возврата по ссылке
oxotnik
29.12.2010, 14:21
  #29

Не по теме:

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

Nameless One
29.12.2010, 14:23
  #30

Не по теме:

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

oxotnik
29.12.2010, 14:32
  #31

Не по теме:

Nameless One, на бесптичье и попа соловей
а тема будет интересна хотя бы начинающим, которые путаются в ссылках и указателях, прочитают, может чего то поймут

Nameless One
29.12.2010, 14:51
  #32

Не по теме:

oxotnik, оно то может быть и так, только я все-равно считаю, что для начинающего нет ничего лучше хорошей книжки. Форум - вещь хорошая, но знания должны быть систематическими

oxotnik
29.12.2010, 14:53
  #33

Не по теме:

Цитата Сообщение от Nameless One Посмотреть сообщение
для начинающего нет ничего лучше хорошей книжки. Форум - вещь хорошая, но знания должны быть систематическими
человек спросил непонятные моменты, ему объяснили, видно что он читает и пытается разобраться, следующий новичок скорей всего тоже будет читать, потом в форум полезет и наткнется на эту тему

Aaxenon
29.12.2010, 15:14  [ТС]
  #34

Не по теме:

Цитата Сообщение от Nameless One Посмотреть сообщение
ответ на вопрос, заданный в этой теме, можно найти в любой книжке по С/С++. Я думаю, даже в самоучителях для чайников...
может в самоучителях для чайников есть, а в книге Страуструпа нет..к сожалению, я не нашел книги, где максимально четко описаны такие спорные моменты, да еще и с примерами..у меня на винте десяток книг, но на форуме мне за 15 минут хорошо объяснили и я рад, что могу спокойно продолжать читать Страуструпа, а не провести весь день, ища ответ на этот вопрос, и, в результате, не факт, что нашел бы

silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
29.12.2010, 15:46     Указатели #35
Эх, не надо бы новичку Страуструпа читать... Ну не писатель он, не учитель, так сказать, по призванию...
Aaxenon
29.12.2010, 16:19  [ТС]
  #36

Не по теме:

Цитата Сообщение от silent_1991 Посмотреть сообщение
Эх, не надо бы новичку Страуструпа читать... Ну не писатель он, не учитель, так сказать, по призванию...
как бы не совсем новичок..синтаксис знаю, основные пункты знаю, пора, так сказать, глубже копать..

silent_1991
29.12.2010, 16:23
  #37

Не по теме:

Ну так глубже копать - это всё равно учиться. Тем более указатели - это, не в обиду, начальный уровень. Одно из основных средств, без которых дальше - ни-ни.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2010, 16:40     Указатели
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Aaxenon
29.12.2010, 16:40  [ТС]     Указатели
  #38

Не по теме:

Цитата Сообщение от silent_1991 Посмотреть сообщение
Ну так глубже копать - это всё равно учиться. Тем более указатели - это, не в обиду, начальный уровень. Одно из основных средств, без которых дальше - ни-ни.
окей..

Yandex
Объявления
29.12.2010, 16:40     Указатели
Ответ Создать тему
Опции темы

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