Tôi đang duyệt SO và tìm thấy cái này một số mãĐiều này đặt ra một câu hỏi cho tôi.
nút cấu trúc* BuildOneTwoThree() {
nút cấu trúc *list = malloc(3 * sizeof(nút cấu trúc));
danh sách[0].data = 1;
danh sách[0].next = danh sách+1;
danh sách[1].data = 2;
danh sách[1].next = danh sách+2;
danh sách[2].data = 3;
list[2].next = NULL;
danh sách trả lại;}
Tôi đang cố gắng hiểu lệnh gọi malloc này hoạt động như thế nào và nó trả về kết quả gì. Nó có trả về một mảng con trỏ không? Nó hoạt động như thế nào, tôi không mong đợi malloc hoạt động theo cách này?
Điều này dường như đảm bảo rằng các chỉ mục bộ nhớ của các cấu trúc riêng lẻ là lần lượt, mà tôi nghĩ có thể là một công cụ mạnh mẽ hoặc hữu ích.
Ngoài ra, sau khi gọi malloc như thế này, có thể khởi tạo chỉ mục mảng như
danh sách [0] = (nút cấu trúc) {1, danh sách +1};
Lưu ý: Nút cấu trúc được định nghĩa là,
nút cấu trúc {
dữ liệu int;
nút cấu trúc *tiếp theo;};
nút cấu trúc *list = malloc(3 * sizeof(nút cấu trúc));
==> Tạo cấu trúc ba nút trong bộ nhớ, với danh sách trỏ đến phần đầu của bộ nhớ lưu trữ. có nghĩalist=&list[0] hoặc *list = list[0], list+1=&(list[1]) hoặc *(list+1)=list[1], list+2=&( list[2]) hoặc *(danh sách+2)=danh sách[2]
danh sách [0] = (nút cấu trúc) {1, danh sách +1};
==> Vâng, bạn có thể làm được điều đó. Đây là cách tôi sửa đổi nó và nó hoạt động tốt:
nút cấu trúc* BuildOneTwoThree() {
nút cấu trúc *list = (nút cấu trúc *)malloc(3 * sizeof(nút cấu trúc));
danh sách[0] = { 1, danh sách + 1 };
danh sách[1] = { 2, danh sách + 2 };
danh sách[2] = { 3, NULL };
danh sách trả lại;
}
Tôi là một lập trình viên xuất sắc, rất giỏi!