| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > интереснейший пример |
| Автор: lamber 24.1.2011, 00:27 | ||
Вечером решил бегло пробежатся по айти ресурсам, с целью почитать что люди пишут а может и постараться помочь кому-то в нелегком изучении программирования а в часности таких языков как C/C++. И вот на stackoverflow.com нарвался на интересейший пример, хотел было отправить автору своего предположение (хорошо что не сделал т.к. оно было ошибочным). К чему много слов вот сам пример.
По идее после выполнение функции указатель p должен ссылаться на переменную со значением 1, но он все так же ссылается на NULL почему спрашивается |
| Автор: mes 24.1.2011, 00:38 |
| потому что указатель передается как копия.. |
| Автор: lamber 24.1.2011, 00:51 |
| но как же так, что бы передать по значению можно использовать дву вещи это передача по ссылке либо передача указателя. Мы передвем по указателю, и у нас создается копия. Какой код будет правильный mes :? |
| Автор: volatile 24.1.2011, 00:56 | ||
Имхо, чтобы функция могла менять указатель можно сделать например так:
|
| Автор: KaraKum 24.1.2011, 00:58 | ||
Вот так нужно объявить функцию если нужно чтобы изменялся сам указатель:
|
| Автор: lamber 24.1.2011, 01:08 |
| volatile но зачем объявлять указатель на указатель в чем причина :? где об этой особенности можно прочитать :? KaraKum впервые вижу такую языковую конструкцию, объясни что она делает и где опять же о ней прочитать если так разобрать то получается *&p=>**p Одни предположения вообщем |
| Автор: volatile 24.1.2011, 01:18 |
| Как правильно указал mes, у Вас передается копия указателя. Чтобы функция могла менять сам указатель нужно его передать либо по ссылке (вариант KaraKum), либо по указателю (мой вариант.) |
| Автор: Фантом 24.1.2011, 01:28 |
Так ведь стандартный случай - все параметры функций всегда передаются по значению. Если что-то требуется изменить внутри функции и вернуть обратно, то нужно либо передать указатель на это "что-то" (C/C++), либо ссылку на это "что-то" (С++). И даже если это "что-то" само по себе является указателем, на него все эти соображения распространяется точно так же. |
| Автор: kemiisto 24.1.2011, 01:30 |
| Бедняга. |
| Автор: azesmcar 24.1.2011, 06:04 |
| lamber Все нормально. Есть объекты, есть указатели. Ты передаешь по указателю объект, а указатель по значению, т.е. сам указатель копируется, а объект - нет. В конце концов указатель это обычный тип, который хранит адрес. Его тоже можно передавать по указателю или по ссылке. |
| Автор: lamber 24.1.2011, 09:14 |
| М-да интересный момент, у Шилдта в его справочнике и у Либерти этого не нашел. Ну чтож спасибо за разъяснения, хорошо когда есть куда рости, тему можно закрывать. |
| Автор: boostcoder 24.1.2011, 16:07 |
пруф, пожалуйста. |
| Автор: xvr 24.1.2011, 19:49 | ||
Пруф чего? Того, что это 'интереснейший пример'? |
| Автор: boostcoder 24.1.2011, 20:01 |
пруф на пост, на который ТС хотел ответить. |
| Автор: lamber 24.1.2011, 22:04 |
| Пруф линк http://stackoverflow.com/questions/4776010/pass-by-reference-and-value-with-pointers |
| Автор: boostcoder 24.1.2011, 22:07 | ||
ага. спасибо. |