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

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

Войти
Регистрация
Восстановить пароль
 
rizr
1 / 1 / 0
Регистрация: 13.01.2013
Сообщений: 71
#1

указатель - C++

13.01.2013, 02:55. Просмотров 286. Ответов 9
Метки нет (Все метки)

собственно смысл ссылки я понял, грубо говоря передача в функцию адреса переменной что бы функция меняла не копию, а сам передаваемый аргумент плюс избежания лишнего копирования, а что делает указатель тогда когда через него передают в функцию?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2013, 02:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос указатель (C++):

Как получить ссылку на указатель или указатель на указатель в массиве? - C++
В процессе реализации сортировки пузырьком натолкнулся на такую проблему: как поменять значения указателей, передаваемых в функцию. Если...

Функция, получающая указатель на обычную функцию, получает указатель на метод класса - C++
Здравтсвуйте. Имеется вопрос по указателям на методы класса. Допустим, есть функция( f ), которая принимает указатель на функцию и...

Функция, принимающая указатель и число байт и выделяющая память под указатель - C++
Здравствуйте. Задача легкая, но почему-то завис Нужно написать функцию, принимающую указатель и число байт и выделяющую память под...

Как правильно удалять выделенную память под указатель на указатель? - C++
есть код #include <iostream> #include <conio.h> #include <stdlib.h> #include <time.h> using namespace std; void sort_1(const...

Реализация двоичных деревьев поиска: Зачем в параметрах функции используется указатель на указатель - C++
Всем привет, встретил в книге такой пример добавления узла в дерево: typedef struct tree { int data; tree *left, *right,...

Передача умного указателя в функцию принимающую указатель на указатель - C++
Итак имеется функция со следующим параметром: HRESULT __stdcall Function(SomeClass **param); В случае, когда создаём обычный...

9
zvoronz
271 / 239 / 21
Регистрация: 29.05.2012
Сообщений: 889
13.01.2013, 03:11 #2
Фактически происходит тоже самое. Ссылки иногда ещё называют скрытыми указателями.
изменение будет в синтаксисе например
mult(int a, int b, int&res);
mult2(int a, int b, int* res);

mult(2, 5, otv);
mult2(2, 5, &otv);
0
rizr
1 / 1 / 0
Регистрация: 13.01.2013
Сообщений: 71
13.01.2013, 03:18  [ТС] #3
ну я не думаю что это всё только ради синтаксиса делали. ссылками проблем нету, а вот с указателями у меня путанина (
0
UserAK
73 / 73 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
13.01.2013, 03:21 #4
ну вот допустим есть у тебя число какое-то например 150, находится в 10-й ячейке памяти
ссылка это содержимое ячейки памяти тобиш 150, а адрес это номер ячейки тоесь 10
0
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
13.01.2013, 03:22 #5
rizr, у них смысл разный: ссылка - это как бы "псевдоним" переменной, указатель же хранит адрес переменной.
0
UserAK
73 / 73 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
13.01.2013, 03:45 #6
кстати есть ещё значение.
ссылка очень похожа на значение но это не совсем одно и то же

Добавлено через 1 минуту
значение не привязано к памяти, а ссылка и указатель привязаны к памяти

Добавлено через 4 минуты
значение переменной можно изменять, адрес переменной изменить нельзя. когда изменяется указатель, он не меняет адрес переменной, а просто начинает указывать на другую переменную

Добавлено через 9 минут
вот допустим живёт человек в квартире, в этом случае
указатель - номер квартиры
ссылка - имя жильца
значение - сам человек

если он переехал
указатель так и указывает на квартиру
ссылка даст нам имя нового жильца
а значение (человек) где-то в другом месте живёт
0
rizr
1 / 1 / 0
Регистрация: 13.01.2013
Сообщений: 71
13.01.2013, 03:57  [ТС] #7
ну а тогда как понять когда нужно(или не обойтись без него) использовать указатель?
0
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
13.01.2013, 04:03 #8
Цитата Сообщение от rizr Посмотреть сообщение
ну а тогда как понять когда нужно(или не обойтись без него) использовать указатель?
Когда надо хранить\использовать адрес переменной. Если просто нужно косвенное обращение к переменной - ссылки должно быть достаточно.
0
Kuzia domovenok
2078 / 1907 / 176
Регистрация: 25.03.2012
Сообщений: 6,574
Записей в блоге: 1
13.01.2013, 04:14 #9
изучи чистый си, и увидишь сотни ситуаций, как и когда использовать указатели. Ссылки же в С++ чаще всего используются лишь для передачи аргументов в функции по ссылке. Поправьте, если ошибаюсь.

Добавлено через 10 минут
Проблема со ссылками в том, что они не могут быть неинициализированы, похоже они изначально затачивались именно под передачу аргументов в функции по ссылке. Во всех остальных случаях я использую указатель.
Выделение динамической памяти: указатели
хранение адреса следующего элемента в связанном списке/дереве/и.т.п: указатели
хранение указателя на объект абстрактного класса: указатели.
1
UserAK
73 / 73 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
13.01.2013, 05:11 #10
в любом случае при передаче ссылки или указателя в стек запихивается адрес, тут разницы нету. просто как удобнее и понятнее ) например если надо с памятью работать, то лучше указатель, а если просто со значением что-то делать без лишней писанины, то ссылка лучше

Добавлено через 13 минут
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Выделение динамической памяти: указатели
вот, кстати хороший пример можно привести. допустим написан код, в котором переменная создаётся в локальной памяти.
C++
1
2
int i = 0;
// и много разных использований этой переменной
а потом понадобилось что бы эта переменная была в динамической памяти
проще сделать так
C++
1
2
int *pi = new int(0);
int &i = *pi;
и тогда ничего в коде не надо менять, только дописать в конце
C++
1
delete pi;
0
13.01.2013, 05:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2013, 05:11
Привет! Вот еще темы с ответами:

Объяснить работу функции, возвращающей указатель на указатель на char - C++
Добрый день! Сможете объяснить что означает запись char **InputFile(int &strings);? Почему именно двойное **? Буду очень благодарна...

Указатель на указатель, функции для создания новых массивов? - C++
Всем привет! У меня в коде есть несколько новых массивов, чтобы не повторяться я создам функцию которая будет выделять память под новые...

Функция принимает указатель на void и возвращает указатель на int - C++
Запишите прототип функции, которая принимает указатель на void и возвращает указатель на int.

Приведение любого двумерного массива к типу указатель на указатель - C++
Допустим, есть несколько массивов int arr1; int arr2; int arr3; Какое преобразование нужно сделать, чтобы подобные присвоения...


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

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

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