![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Пользователь
Регистрация: 03.03.2018
Сообщений: 25
|
![]()
Доброго дня, люди!
Голова в процессе задумалась над таким "пустяком". И чтобы не писать самому программульку для проверки, решил спросить у умных людей сразу. В функцию а приходит указатель на указатель на структуру - **struct_ptr В нём может лежать указатель на структуру, а может быть NULL. Первым делом я проверяю, что в **struct_ptr у нас не вообще NULL А дальше возник вопрос - если я передам из функции а в функцию b указатель *struct_ptr я буду работать с указателем или с копией указателя? смогу ли я в *struct_ptr поменять данные? Или в функцию b тоже придётся уже передавать указатель на указатель? Подскажите, пожалуйста! Пример кода Код:
|
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 03.03.2018
Сообщений: 25
|
![]()
В функцию a из main я передам &struct_ptr. Что будет если в b из main я передам просто struct_ptr? Копия будет или нет?
Последний раз редактировалось Салага; 06.03.2025 в 12:54. |
![]() |
![]() |
![]() |
#3 |
фрилансер, препод.
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,041
|
![]()
Салага, можно же просто попробовать
![]() Код:
Код:
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,370
|
![]()
Указатель на указатель обычно используется когда надо *вернуть* указатель на данный объект.
Если требуется только чтение то передавать указатель на указатель это лишнее. |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 16.05.2024
Сообщений: 193
|
![]()
Указатель на указатель передают в функцию обычно для того, чтобы эта функция установила этот указаталь (проинициализировала).
tip1* p1; // здесь p1 не проинициализирован и не установлен ни во что, использование p1 будет считаться неопределённым поведением funcA( &p1); // здесь p1 уже проинициализирован и указывает на валидную область памяти ----- void funcA( tip1** a_p ) { *a_p = malloc( sizeof tip1 ); } |
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 03.03.2018
Сообщений: 25
|
![]()
Спасибо вам, добрые люди!
Алексей, вам особенно за код! Скопировал себе и из main вызвал b(p). Тоже убедился, что значение поменяется. У меня со студенчества в голове засело такое, что всё, что передано без адреса & будет являться копией ![]() И верно подметили, что указатель на указатель, чтобы его проинициализировать и вернуть. Спасибо! |
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,828
|
![]() |
![]() |
![]() |
![]() |
#8 |
фрилансер, препод.
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,041
|
![]()
таки речь про C++, а не про C , раз скомпилилось. Заголовок то плюснутый
![]() Тогда нужно себя не путать и передавать по ссылке то, что нужно поменять внутри функции Код:
Если передаётся адрес "внешнего" указателя, то этот указатель можно будет внутри функции. Если указатель передаётся по значению, то в функции будет его копия. Если менять копию, "внешний" объект (с которого копия была сделана) не меняется |
![]() |
![]() |
![]() |
#9 |
фрилансер, препод.
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,041
|
![]() Код:
Код:
|
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 03.03.2018
Сообщений: 25
|
![]()
Алексей, ну уж что такое iostream я понимаю, не целиком прям взял и скопировал
![]() р51х, получается если в адресе на адрес у меня не NULL, а адрес на значение, то я этот адрес на значение могу передавать уже куда хочу и сколько хочу и делать там с самим значением что угодно. Верно? |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[C++]: Почему функция в этом коде принимает в качестве аргумента указатель на указатель? | nwhta | Общие вопросы C/C++ | 5 | 04.01.2017 18:09 |
массив Указатель на указатель | fr0st1k123 | Общие вопросы C/C++ | 3 | 27.12.2015 18:06 |
Указатель | Sektr63 | Общие вопросы C/C++ | 6 | 30.03.2013 15:52 |
Передать указатель на указатель в функцию | erro | Общие вопросы C/C++ | 3 | 29.10.2012 17:59 |
Указатель... | Romario92 | Общие вопросы C/C++ | 16 | 22.10.2010 20:37 |