Доступ к аргументам функции извне. Возможно ли?

Даны функции и структура:

typedef struct s_list
{
    void            *content;
    struct s_list   *next;
}   t_list;

t_list  *ft_lstnew(void *content);                // создает новый элемент списка;
void    ft_lstadd_back(t_list **lst, t_list *new);// добавляет элемент в конец списка;
t_list  *ft_lstlast(t_list *lst);                 // возвращает указатель на последний элемент списка;
int     get_next_line(int fd, char **line);       //записывает в строку по данному адресу следующую строку, считанную (например) с файла до '\n' включительно;

Я хочу получать новые строки и сразу же их записывать во вновь созданный новый элемент списка. Но не знаю как это сделать в одну строку.
Далее - ход моих размышлений.
Казалось бы можно так:

get_next_line(fd, (char**)&(mylist->content));

Но при mylist == NULL - не выйдет. Получается нужно создать новый элемент и записать уже в него:

get_next_line(fd, (char**)&(ft_lstnew(NULL)->content));

- тоже не то - так как я теряю адрес этого нового элемента.
Пойдем дальше:

get_next_line(fd, (char**)&(mylist = ft_lstnew(NULL))->content));

Здесь похоже на правду, но все же это не элемент списка, а структура.

И вот тут я в затруднительном положении. Мне не удается вызвать void-функцию ft_lstaddback(&head, ft_lstnew(NULL)); и извлечь из нее адрес последнего элемента.

Отсюда и вопрос - есть ли возможность извлечь адрес аргумента извне void-функции?


Ответы (1 шт):

Автор решения: Qwertiy

Скорее всего так:

s_list *mylist = 0, *last = 0;

get_next_line(
  fd,
  (char*)(
    last
    ? (ft_lstaddback(last, last = ft_lstnew(0)), last)
    : (mylist = last = ft_lstnew(0))
  )->content)
);
→ Ссылка