|
10 / 10 / 2
Регистрация: 01.02.2010
Сообщений: 317
|
||||||
Указатель на указатель - разница способов14.03.2010, 14:18. Показов 2278. Ответов 18
Метки нет (Все метки)
зачем тогда есть первый? и как сделать укзатель на указатель на указатель?
0
|
||||||
| 14.03.2010, 14:18 | |
|
Ответы с готовыми решениями:
18
Указатель или ссылка на указатель. В чем разница? Как получить ссылку на указатель или указатель на указатель в массиве?
|
|
Псевдо программист
192 / 113 / 37
Регистрация: 19.09.2009
Сообщений: 303
|
|
| 14.03.2010, 14:26 | |
|
Krist_ALL, "второй способ" это не указатель на указатель, я присвоить значению указателя f значение b
первый способ единственный
0
|
|
|
10 / 10 / 2
Регистрация: 01.02.2010
Сообщений: 317
|
||||||
| 14.03.2010, 14:43 [ТС] | ||||||
0
|
||||||
|
10 / 10 / 2
Регистрация: 01.02.2010
Сообщений: 317
|
|
| 15.03.2010, 14:57 [ТС] | |
|
int a = 5;
Первый способ int *b = &a; int *c = b; int *d = c; ВТорой int *b = &a; int **c = &b; int ***d = &c; первый ведь удобнее. и не надо тучу * писать.. или я не прав?
0
|
|
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||
| 15.03.2010, 15:11 | ||
Сообщение было отмечено как решение
Решение
Ты не прав. Это два разных способа, и используются они в разных случаях (конечно же, в твоем случае второй способ не используется, как нерациональный)
Первый способ. Ты объявляешь целую переменную a, потом объявляешь указатель b на целый тип, и инициализируешь его адресом a (с помощью операции взятия адреса). Теперь в переменной b хранится адрес a. Потом ты объявляешь еще один указатель c на целый тип, и инициализируешь его не адресом указателя b, а значением, которое он хранит-адресом а. Остальные указатели объявляются и инициализируются аналогично. Теперь, чтобы получить доступ к значению, которое храниться в a, например, с помощью указателя b, тебе нужно совершить однократную операцию разыменования указателя(например, *b=19 - и в переменной a будет храниться уже значение 19). Второй способ. c - это уже указатель на указатель на целый тип, и он хранит уже не адрес a, а адрес указателя b. Соответственно, d - это указатель на указатель на указатель на целый тип, и чтобы изменить значение a с помощью указателя d, тебе нужно применить три раза операцию разыменования (***d=19). (*d==c==&b==&&a, **d==b==&a, ***d==a - это для наглядности )PS. Здесь и ответ на твой вопрос:
2
|
||
|
10 / 10 / 2
Регистрация: 01.02.2010
Сообщений: 317
|
|
| 15.03.2010, 15:23 [ТС] | |
|
Это я понимаю)
ав каких случаях первый способ рационален а когда второй. в каких ситуациях?
0
|
|
|
|
|||
| 15.03.2010, 15:26 | |||
|
Увидишь, что второй код - вовсе не то, что ты думал Добавлено через 1 минуту
0
|
|||
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
| 15.03.2010, 15:27 | |
|
Evg, ну я же написал - для наглядности
0
|
|
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||||||||||||
| 15.03.2010, 15:44 | ||||||||||||
|
Начнем с того, что в C/C++ массивы реализованы с помощью указателей:
Без указателей на указатели не обойтись, если ты хочешь динамически выделить память под многомерный массив:
0
|
||||||||||||
|
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
||||||
| 15.03.2010, 15:57 | ||||||
|
Двойной указатель используется для передачи простого указателя по адресу.
Могу не большой пример привести: добавление на вершину стека:
1
|
||||||
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
| 15.03.2010, 16:06 | |
|
Genius Ignat, пример, конечно, наглядный, но что нам мешает передавать не адрес указателя, а сам указатель, и не применять лишних операций разыменования?
0
|
|
|
10 / 10 / 2
Регистрация: 01.02.2010
Сообщений: 317
|
|
| 15.03.2010, 17:14 [ТС] | |
|
а как передавать не адрес указателя, а сам указатель?
0
|
|
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||||||
| 15.03.2010, 17:18 | ||||||
0
|
||||||
|
|
|||||||
| 15.03.2010, 18:02 | |||||||
1
|
|||||||
|
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
|||||||||||||||||
| 15.03.2010, 21:11 | |||||||||||||||||
Сообщение было отмечено как решение
Решение
Nameless One:
Ты ошибаешься, это уже не добавление на вершину стека. Так как указатель вершины не изменит своего значения. В этом примере ты не управляешь указателем вершины стека. Ты просто берешь адрес из одного указателя и записываешь его в другой.
Вот правильная вариация:
Бесконечность и далее... после увиденного просьба не задавать вопросы. Добавлено через 10 минут
Добавлено через 15 минут Nameless One: Дам тебе один совет, который дал мне один мой друг: Прежде чем что то говорить нужно быть уверенным что это истина, если ты не уверен посмотри в литературу. Это я говорю к тому что бы ты не вводил в заблуждения людей, которые только познают программирование. Надеюсь ты извлечешь пользу из этого высказывания.
3
|
|||||||||||||||||
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|||||||
| 16.03.2010, 05:33 | |||||||
1
|
|||||||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|||
| 16.03.2010, 06:00 | |||
|
Добавлено через 1 минуту
0
|
|||
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
| 16.03.2010, 09:59 | |
|
Genius Ignat, Спасибо, я понял свою ошибку
2
|
|
| 16.03.2010, 09:59 | |
|
Помогаю со студенческими работами здесь
19
Итератор и указатель в чем разница
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|