![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| lamber |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 20.12.2008 Репутация: нет Всего: нет |
Вечером решил бегло пробежатся по айти ресурсам, с целью почитать что люди пишут а может и постараться помочь кому-то в нелегком изучении программирования а в часности таких языков как C/C++. И вот на stackoverflow.com нарвался на интересейший пример, хотел было отправить автору своего предположение (хорошо что не сделал т.к. оно было ошибочным). К чему много слов вот сам пример.
По идее после выполнение функции указатель p должен ссылаться на переменную со значением 1, но он все так же ссылается на NULL почему спрашивается |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
потому что указатель передается как копия..
|
|||
|
||||
| lamber |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 20.12.2008 Репутация: нет Всего: нет |
но как же так, что бы передать по значению можно использовать дву вещи это передача по ссылке либо передача указателя.
Мы передвем по указателю, и у нас создается копия. Какой код будет правильный mes :? |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
Имхо, чтобы функция могла менять указатель можно сделать например так:
|
|||
|
||||
| KaraKum |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: 1 Всего: 1 |
Вот так нужно объявить функцию если нужно чтобы изменялся сам указатель:
|
|||
|
||||
| lamber |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 20.12.2008 Репутация: нет Всего: нет |
volatile но зачем объявлять указатель на указатель в чем причина :? где об этой особенности можно прочитать :?
KaraKum впервые вижу такую языковую конструкцию, объясни что она делает и где опять же о ней прочитать если так разобрать то получается *&p=>**p Одни предположения вообщем |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
Как правильно указал mes, у Вас передается копия указателя.
Чтобы функция могла менять сам указатель нужно его передать либо по ссылке (вариант KaraKum), либо по указателю (мой вариант.) Это сообщение отредактировал(а) volatile - 24.1.2011, 01:19 |
|||
|
||||
| Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: нет Всего: 49 |
Так ведь стандартный случай - все параметры функций всегда передаются по значению. Если что-то требуется изменить внутри функции и вернуть обратно, то нужно либо передать указатель на это "что-то" (C/C++), либо ссылку на это "что-то" (С++). И даже если это "что-то" само по себе является указателем, на него все эти соображения распространяется точно так же. |
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 2 Всего: 160 |
Бедняга.
-------------------- |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
lamber
Все нормально. Есть объекты, есть указатели. Ты передаешь по указателю объект, а указатель по значению, т.е. сам указатель копируется, а объект - нет. В конце концов указатель это обычный тип, который хранит адрес. Его тоже можно передавать по указателю или по ссылке. |
|||
|
||||
| lamber |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 20.12.2008 Репутация: нет Всего: нет |
М-да интересный момент, у Шилдта в его справочнике и у Либерти этого не нашел. Ну чтож спасибо за разъяснения, хорошо когда есть куда рости, тему можно закрывать.
|
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
||||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
пруф, пожалуйста. |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
||||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |