Я пишу функцию, которая должна вызываться несколько раз, где я хочу иметь статический указатель на начало списка. Мне нужна функция, независимо от того, сколько раз она называется, для доступа к одному списку, поэтому у меня есть два вопроса.Статическая переменная в функции, называемой повторно C
Могу ли я правильно, что если я открою
static t_line *begin = NULL;
гдеt_line
это мой-структуру, я считаю, что это уже будет выделено правильное пространство передmain()
называется, как я понимаюstatic
переменные делают, то это даст мне нулевой указатель с правильным выделенным размером.Как только я укажу этот статический указатель на адрес первого элемента в моем списке, в следующий раз, когда функция вызывается и дойдет до этой строки объявления, не будет ли она просто сбросить ее на
NULL
, и я потеряю свой указатель?
Это дает вам нулевой указатель, и все. Здесь нет никакого выделения, кроме самой статической переменной, которая выделяется в сегменте bss. – Lundin
"[...] нулевой указатель с правильным выделенным размером" не имеет никакого смысла. Вы получаете указатель, это сама переменная ('begin'), но дальнейшего« выделения »не будет. Указатель на данный тип всегда имеет одинаковый размер, нет ничего, что не могло бы быть «правильным». – unwind
Ты абсолютно прав. Я думал об этом совершенно неправильно. – Khaz