Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиПоискОблакоVK ComboВсе проекты

Что обозначает двойная звездочка в C и почему функция возвращает значение не ссылкой а числом (return 1 return 0)?

ФермаКактусов Высший разум (127301), закрыт 1 месяц назад
Лучший ответ
serd Мудрец (14407) 1 месяц назад
DIR ** это указатель на указатель на DIR. Он затем разыменовывается и получается указатель на DIR.
Почему возвращает число - видимо так надо было разработчикам lua. Можешь попробовать погуглить эту тему.
P.s. в СИ нет ссылок, только указатели. А вот в С++ если и ссылки и указатели.
ФермаКактусовВысший разум (127301) 1 месяц назад
синтаксис у луа запутан, я теперь понимаю почему когда вышел сталкер был баг на баге и багом управлял
serd Мудрец (14407) ФермаКактусов, Ну, это исходный код самого lua (на сколько я понял), написанный на си. На скрине синтаксис самого си.
Остальные ответы
ghjg gfggf Мудрец (14181) 1 месяц назад
Соответствует нулю или более символов в нескольких сегментах. Он используется для подстановки файлов, находящихся во вложенных каталогах.
kaiu Гений (88302) 1 месяц назад
Вот как раз число очень просто, так как 0 всегда ОК было в си, а отличие от него есть номер какой-то ошибки.
А вот по поводу подобного DIR **d = (DIR **)lua_newuserdata(L, sizeof(DIR *));
скажу так, если вы имеет просто указатель type *u то для возможности изменения его где-то не достаточно просто передать в виде
type *u;
f(type *x) // f(u)
{
x = y;
}
так как при выходе из функции f вы не измените указатель u
Так что приходится передавать
type *u;
f(type **x) // f(&u)
{
*x = y;
}
и при выходе из функции все заменится.
Вот общая идея, зачем нужны ** в си...все так запутано в этой адресной арифметике, что ну её.
Похожие вопросы