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

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

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

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

29.12.2010, 12:56. Просмотров 1659. Ответов 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++
Знаю что таких вопросов было уйма, но я так и не нашел ответа на свой вопрос. Для чего нужны указатели? Что такое указатели я знаю, это...

37
oxotnik
1591 / 1068 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
29.12.2010, 13:00 #2
Цитата Сообщение от RoY_Mu$T@nG Посмотреть сообщение
зачем здесь указатели, почему нельзя просто использовать переменные?
не нужны по идее указатели
Цитата Сообщение от RoY_Mu$T@nG Посмотреть сообщение
и вообще для чего используются указатели, в чем необходимость их использования?
это наследие языка Си, где не было высокоуровневых средств работы с памятью
1
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
29.12.2010, 13:00 #3
Изменяемые параметры нельзя передавать по значению. И хотя здесь значения просто меняются местами, но у каждого параметра отдельно значение должно именно измениться, так что он изменяемый. Поэтому функции надо передать инфу о том, где находятся параметры. Но лучше так:
C++
1
2
3
4
5
6
void swap(int &p, int &q)
{
 int t = p;
 p = q;
 q = t;
}
1
yanyk1n
4330 / 1461 / 152
Регистрация: 12.03.2009
Сообщений: 5,310
29.12.2010, 13:02 #4
RoY_Mu$T@nG, при обычном (int a, int b) функция работает с локальными копиями перменных, которые уничтожаются при завершении работы функции. Через указатель можно передать реальный адрес переменной, т.е. передаётся не её копия, а сама переменная. Тогда значение изменится (при помощи разыменования указателя)
1
Aaxenon
Light Knight
106 / 29 / 3
Регистрация: 03.06.2010
Сообщений: 361
29.12.2010, 13:04  [ТС] #5
т.е. в С++ можно спокойно жить без них?)
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
29.12.2010, 13:04 #6
taras atavin, Не лучше.
С указателями очевиднее. Ибо при ссылке мы посылаем в функцию просто параметры. А при указателях мы посылаем адреса переменных. Сам же Страуструп пишет, что это лучше.
1
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
29.12.2010, 13:14 #7
Цитата Сообщение от RoY_Mu$T@nG Посмотреть сообщение
т.е. в С++ можно спокойно жить без них?)
как уже сказали, то конкретно данную задачу в C++ можно решить либо через указатели, либо через ссылки (которые были добавлены для удобства, если я не ошибаюсь). Если передавать переменные по значению, ничего не выйдет. А насчет того, можно ли жить в С++ без указателей, то могу тебя огорчить - явно либо неявно, но использовать указатели тебе придется. К примеру, массивы в С++ - это нично иное, как указатели. Или еще пример - попробуй построить связный список без использования указателей.
1
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
29.12.2010, 13:18 #8
Nameless One, Ну если использовать STL использовать указатели не нужно) Явно, ибо неявно все равно их используем.
1
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
29.12.2010, 13:19 #9
Цитата Сообщение от ForEveR Посмотреть сообщение
Nameless One, Ну если использовать STL использовать указатели не нужно) Явно, ибо неявно все равно их используем.
Это я как раз и подразумевал под неявным использованием
1
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
29.12.2010, 13:20 #10
Цитата Сообщение от ForEveR Посмотреть сообщение
С указателями очевиднее.
А потом ты где нибудь забудешь & перед именем фактического параметра. И чем это лучше? А об изменяемости параметров и о том, как именно они меняются, должно говорить имя функции. Если оно ни о чём не говорит, то мало ли как могу измениться параметры, переданные по указателю? Так что лучше как раз по ссылке.
Цитата Сообщение от RoY_Mu$T@nG Посмотреть сообщение
т.е. в С++ можно спокойно жить без них?)
Нет. Все динамические данные могут быть основаны только на указателях, но не на ссылках. Да и массив проблематично передать по ссылке. Но там, где ссылки не добавляют сложностей, надо заменять ими указатели.
1
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
29.12.2010, 13:22 #11
taras atavin, А потом ты где-нибудь забудешь написать & перед именем формального параметра... Так что про забывчивость говорить не стоит. Людям это свойственно. Неконстантные ссылки лучше не использовать. Хоть и проще.
1
yanyk1n
4330 / 1461 / 152
Регистрация: 12.03.2009
Сообщений: 5,310
29.12.2010, 13:23 #12
Цитата Сообщение от taras atavin Посмотреть сообщение
Все динамические данные могут быть основаны только на указателях, но не на ссылках.
А как же возвращение значения по ссылке?
1
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
29.12.2010, 13:25 #13
yanyk1n, Ну смотря что ты имеешь ввиду... Пример можно?
1
yanyk1n
4330 / 1461 / 152
Регистрация: 12.03.2009
Сообщений: 5,310
29.12.2010, 13:27 #14
ForEveR, ну... к примеру перегрузка оператора <<, чтобы можно было использовать конструкции типа
C++
1
2
My_Class my_object;
cout << my_object << endl;
Вроде как там тоже построено на механизме указателей
1
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
29.12.2010, 13:28 #15
Цитата Сообщение от ForEveR Посмотреть сообщение
Неконстантные ссылки лучше не использовать.
Наоборот, константные. Ты пихаешь параметры в первую попавшуюся функцию, совместимую по типам? Тогда счастливой отладки. Имя говорит о том, как именно меняются параметры, а передача по указателю - только о факте их изменения, причём, это запросто могут быть и массивы с каким угодно числом элементов и получай ошибку доступа (функция думает, что ей передан массив) за пределы параметра (на самом деле это отдельная переменная). Константные же ссылки ничего не дают, кроме запрета на передачу констант в качестве параметров (стековая оптимизация - задача не автора логики).
1
29.12.2010, 13:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2010, 13:28
Привет! Вот еще темы с ответами:

Написать программу сортировки через указатели на указатели - 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++
Чем они, собственно говоря, отличаются? Поясните, пожалуйста. Не знаю, как так получилось, что в разных источниках - разные...


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

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

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