Сохранен 15
https://2ch.hk/b/res/251449369.html
24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!
Аноним 25/07/21 Вск 10:10:09 #1 №251449369 
15919850669940.jpg
В тред призываются погромисты-чулочники и не только.
Недавно начал изучать си и столкнулся с непониманием смысла двойных и тройных указателей.
В чем смысл сабжа, если мы занимаем лишнюю память под еще один указатель и, разыменовывая двойной указатель, наверное, лишь тратим лишнее время?
То есть почему мы не можем сразу обратиться напрямую через простой указатель? Буду очень рад, если какой-то анон приведет пример практического использования двойных/тройных указателей, так как я ничего не нагуглил.
Всем добра <3
Аноним 25/07/21 Вск 10:12:35 #2 №251449444 
бамп
Аноним 25/07/21 Вск 10:13:03 #3 №251449455 
бамп
Аноним 25/07/21 Вск 10:15:09 #4 №251449518 
>>251449369 (OP)
Указатель на одиночный указатель не используется, но может быть многомерный массив, например. Массив указателей на другие массивы, тип данных будет указатель на указатель.
Аноним 25/07/21 Вск 10:24:21 #5 №251449789 
>>251449369 (OP)
не сука не пидор?
Аноним 25/07/21 Вск 10:29:32 #6 №251449925 
>>251449369 (OP)
Указатель это переменная, содержащая адрес в оперативной памяти. По сути это обычное целое число.
По адресу в памяти может располагаться что угодно, например массив или структура.
Если массив состоит из указателей, то получается таблица (двумерный массив). В реальны программах такое редко используется.
Аноним 25/07/21 Вск 10:30:58 #7 №251449978 
>>251449369 (OP)
>Недавно начал изучать си
Земля тебе пухом.
Аноним 25/07/21 Вск 10:54:13 #8 №251450846 
>>251449369 (OP)
>пример практического использования
Обработка строк с записью результата в исходную переменную.
Например, функция вида char٭ foo(char٭ bar), используемая как bar=foo(bar) сохранит результат в исходную переменную, но проебёт указатель на занятую предыдущим значением память, то есть, создаст утечку. Функция вида void foo(char٭ bar) вообще нихуя не даст, так как объявленная в прототипе переменная bar существует только в контексте функции.
Выйти из ситуации поможет конструкция вида void foo(char٭٭ bar), вызов будет делаться так: foo(&bar). Аргументом ты так передашь не саму строку, которая в реализации C - просто массив символов, а указатель на строку, с помощью которого ты сможешь получить не только прямой доступ к значению строки, но и перед записью нового значения предварительно освободить ранее занятую память.

void foo(char٭٭ bar)
{
...
delete[] bar;
delete
bar;
*bar=...
)
Аноним 25/07/21 Вск 10:56:47 #9 №251450940 
>>251450846
Блядская макаба без экранирования символов. С последним кодом проебался:

void foo(char٭٭ bar)
{
...
delete[] ٭bar;
delete ٭bar;
٭bar=...
}
Аноним 25/07/21 Вск 11:04:26 #10 №251451227 
>>251450846
Ньюфаг ничего не поймет в таких тонкостях. Строки на Си страшная вещь, которую лучше обходить или использовать с большой осторожностью. В 1990 это было норм, но сейчас что угодно лучше.
Аноним 25/07/21 Вск 11:16:06 #11 №251451706 
>>251451227
Вряд ли ньюфагу вообще понадобится профессионально заниматься байтоёбством с Си-строками равно как и писать хоть что-то на Си, что нельзя было бы написать на чём угодно ещё. Но ОП просил пример, я пример привёл.
Аноним OP 25/07/21 Вск 11:22:29 #12 №251451952 
>>251449925
То есть указатели уже неактуальны даже в плюсах?
>>251450846
>char٭ foo(char٭ bar)
то есть просто для передачи массивов символов и их обработки? ну грубо говоря строки
Аноним 25/07/21 Вск 11:30:07 #13 №251452245 
>>251451952
Не "просто", а "с записью результата в исходную переменную". Если быть точнее, то с передачей исходной переменной в контекст функции вместо того чтобы создавать копию переменной, которая с исчезновением контекста функции также исчезнет.
Аноним 25/07/21 Вск 11:53:21 #14 №251453154 
Мимо проходил.
Ничего не понял, но очень интересно.
Приятно ощущать, что меня тут окружают умные и к тому же отзывчивые люди, спасибо вам!
Аноним 25/07/21 Вск 12:24:38 #15 №251454446 
>>251449369 (OP)
смари. когда в функцию передаешь указатель - ты внутри функции можешь изменить то что лежит по этому указателю. было там 3, можешь туда же записать 5.
но при этом ты не можешь поменять значение самого указателя. сделать так чтобы он указывал на другое место. тут нужен указатель на указатель. ну или ссылка на указатель что тоже не лучше.
про многомерные массивы тебе уже написали.
comments powered by Disqus

Отзывы и предложения