Tôi nhận thấy rằng nó là một thành ngữ phổ biến trong C để chấp nhận một con trỏ ed un- malloc
làm đối số thứ hai thay vì trả về một con trỏ. Ví dụ:con trỏ làm đối số thứ hai thay vì trả về con trỏ?
/*function prototype*/
void create_node(node_t* new_node, void* _val, int _type);
/* implementation */
node_t* n;
create_node(n, &someint, INT)
Thay vì
/* function prototype */
node_t* create_node(void* _val, int _type)
/* implementation */
node_t* n = create_node(&someint, INT)
những lợi thế và/hoặc nhược điểm của cả hai phương pháp là gì?
Cảm ơn!
EDIT Cảm ơn tất cả các bạn đã trả lời. Động cơ cho sự lựa chọn 1 rất rõ ràng với tôi bây giờ (và tôi nên chỉ ra rằng đối số con trỏ cho sự lựa chọn 1 nên được malloc'd trái với những gì tôi nghĩ ban đầu).
Điều này. Khả năng thực hiện 'struct điều t; init_thing (&t); 'là tốt đẹp. – dmckee
Nếu tôi muốn viết một chức năng để sao chép một danh sách liên kết, tôi sẽ có một nguyên mẫu chức năng như' void copy_list (node_t * new_head, node_t * original_head) '? Tôi nghĩ rằng tôi sẽ phải malloc một nút mới cho mỗi trong danh sách ban đầu và thêm nó vào 'kết thúc' của new_head (sao chép val và type nhưng cung cấp cho nó một giá trị con trỏ 'node_t * next' mới) .Đây có phải là cách tốt nhất để thực hiện nó? – Tyler
@ Tyler, hãy xem xét 'copy_list (node_t ** new_head, const node_t * original_head)' như một chữ ký có thể thích hợp hơn cho hàm đó (mặc dù trường hợp đặc biệt này _returning_ một 'node_t *' chắc chắn cũng là một khả năng hợp lý) –