這種結構被用作鏈表的頭:當使用指定的初始化程序時,是否可以獲取指向「this」結構的指針?
struct lista
{
struct lista* next;
struct lista* prev;
};
在下一步和上兩分結構本身,則列表爲空。 下面的宏可用於初始化結構:
#define LISTA_INIT_EMPTY(list) { .next = (list), .prev = (list) }
這樣:
struct lista my_list = LISTA_INIT_EMPTY(&my_list);
但是,有沒有辦法通過以下方式做同樣的事情,沒有宏參數?:
struct lista my_list = LISTA_INIT_EMPTY;
我嘗試以下,但它造成的編譯錯誤:
#define LISTA_INIT_EMPTY { .next = &.next, .prev = &.next }
我認爲OP希望所有的名單,包括最初的空的一個,是循環的。這並非完全不合理;通常它會消除列表處理函數中所有難看的角落案例。 –
「CREATE_EMPTY_LISTA」與OP提到的「LISTA_INIT_EMPTY」基本相同。 –
是的,但有一個重要的區別:'struct lista my_list = LISTA_INIT_EMPTY(&my_list);'強制你重複變量的名稱,這是不好的,很容易出錯。 'CREATE_EMPTY_LISTA(my_list);'允許你不重複它。 – Shlublu