В тред призываются погромисты-чулочники и не только. Недавно начал изучать си и столкнулся с непониманием смысла двойных и тройных указателей. В чем смысл сабжа, если мы занимаем лишнюю память под еще один указатель и, разыменовывая двойной указатель, наверное, лишь тратим лишнее время? То есть почему мы не можем сразу обратиться напрямую через простой указатель? Буду очень рад, если какой-то анон приведет пример практического использования двойных/тройных указателей, так как я ничего не нагуглил. Всем добра <3
>>251449369 (OP) Указатель на одиночный указатель не используется, но может быть многомерный массив, например. Массив указателей на другие массивы, тип данных будет указатель на указатель.
>>251449369 (OP) Указатель это переменная, содержащая адрес в оперативной памяти. По сути это обычное целое число. По адресу в памяти может располагаться что угодно, например массив или структура. Если массив состоит из указателей, то получается таблица (двумерный массив). В реальны программах такое редко используется.
>>251449369 (OP) >пример практического использования Обработка строк с записью результата в исходную переменную. Например, функция вида char٭ foo(char٭ bar), используемая как bar=foo(bar) сохранит результат в исходную переменную, но проебёт указатель на занятую предыдущим значением память, то есть, создаст утечку. Функция вида void foo(char٭ bar) вообще нихуя не даст, так как объявленная в прототипе переменная bar существует только в контексте функции. Выйти из ситуации поможет конструкция вида void foo(char٭٭ bar), вызов будет делаться так: foo(&bar). Аргументом ты так передашь не саму строку, которая в реализации C - просто массив символов, а указатель на строку, с помощью которого ты сможешь получить не только прямой доступ к значению строки, но и перед записью нового значения предварительно освободить ранее занятую память.
>>251450846 Ньюфаг ничего не поймет в таких тонкостях. Строки на Си страшная вещь, которую лучше обходить или использовать с большой осторожностью. В 1990 это было норм, но сейчас что угодно лучше.
>>251451227 Вряд ли ньюфагу вообще понадобится профессионально заниматься байтоёбством с Си-строками равно как и писать хоть что-то на Си, что нельзя было бы написать на чём угодно ещё. Но ОП просил пример, я пример привёл.
>>251449925 То есть указатели уже неактуальны даже в плюсах? >>251450846 >char٭ foo(char٭ bar) то есть просто для передачи массивов символов и их обработки? ну грубо говоря строки
>>251451952 Не "просто", а "с записью результата в исходную переменную". Если быть точнее, то с передачей исходной переменной в контекст функции вместо того чтобы создавать копию переменной, которая с исчезновением контекста функции также исчезнет.
>>251449369 (OP) смари. когда в функцию передаешь указатель - ты внутри функции можешь изменить то что лежит по этому указателю. было там 3, можешь туда же записать 5. но при этом ты не можешь поменять значение самого указателя. сделать так чтобы он указывал на другое место. тут нужен указатель на указатель. ну или ссылка на указатель что тоже не лучше. про многомерные массивы тебе уже написали.
Недавно начал изучать си и столкнулся с непониманием смысла двойных и тройных указателей.
В чем смысл сабжа, если мы занимаем лишнюю память под еще один указатель и, разыменовывая двойной указатель, наверное, лишь тратим лишнее время?
То есть почему мы не можем сразу обратиться напрямую через простой указатель? Буду очень рад, если какой-то анон приведет пример практического использования двойных/тройных указателей, так как я ничего не нагуглил.
Всем добра <3