Loại struct được sử dụng là người đứng đầu danh sách liên kết:Có thể lấy con trỏ đến cấu trúc 'này', khi sử dụng trình khởi tạo được chỉ định không?
struct lista
{
struct lista* next;
struct lista* prev;
};
Khi tới và prev cả điểm để tái cấu trúc bản thân, sau đó danh sách là rỗng. vĩ mô sau đây có thể được sử dụng để khởi tạo cấu trúc:
#define LISTA_INIT_EMPTY(list) { .next = (list), .prev = (list) }
theo cách này:
struct lista my_list = LISTA_INIT_EMPTY(&my_list);
Nhưng, liệu có cách nào để làm điều tương tự bằng cách sau, mà không cần thông số vĩ mô ?:
struct lista my_list = LISTA_INIT_EMPTY;
tôi đã thử các sau đây, nhưng nó gây ra một lỗi biên dịch:
#define LISTA_INIT_EMPTY { .next = &.next, .prev = &.next }
Tôi nghĩ OP muốn tất cả các danh sách, bao gồm cả cái trống rỗng ban đầu, là hình tròn. Điều này không hoàn toàn bất hợp lý; thường nó loại bỏ tất cả các trường hợp góc xấu xí trong các hàm xử lý danh sách của bạn. –
'CREATE_EMPTY_LISTA' về cơ bản giống với' LISTA_INIT_EMPTY' được OP đề cập. –
Có, nhưng với một sự khác biệt quan trọng: 'struct lista my_list = LISTA_INIT_EMPTY (& my_list);' buộc bạn phải lặp lại tên của biến, mà không phải là tốt đẹp và khá dễ bị lỗi. 'CREATE_EMPTY_LISTA (my_list);' cho phép bạn không lặp lại nó. – Shlublu