Observé que es una expresión común en C aceptar un puntero ed no-malloc
como segundo argumento en lugar de devolver un puntero. Ejemplo:puntero como segundo argumento en lugar de devolver el puntero?
/*function prototype*/
void create_node(node_t* new_node, void* _val, int _type);
/* implementation */
node_t* n;
create_node(n, &someint, INT)
En lugar de
/* function prototype */
node_t* create_node(void* _val, int _type)
/* implementation */
node_t* n = create_node(&someint, INT)
¿Cuáles son las ventajas y/o desventajas de ambos enfoques?
Gracias!
EDIT Gracias a todos por sus respuestas. Las motivaciones para la opción 1 son muy claras para mí ahora (y debo señalar que el argumento del puntero para la opción 1 debería ser malloc'd contrario a lo que originalmente pensé).
Esto. La capacidad de hacer 'struct thing t; init_thing (&t); 'es bueno. – dmckee
Si quisiera escribir una función para copiar una lista vinculada, ¿tendría un prototipo de función como' void copy_list (node_t * new_head, node_t * original_head) '? Creo que tendría que malloc a nuevo nodo para cada uno en la lista original y agréguelo al 'final' de new_head (copie el val y escriba pero le da un nuevo valor de puntero 'node_t * next'). ¿Es esta la mejor manera de hacerlo? – Tyler
@ Tyler, considere 'copy_list (node_t ** new_head, const node_t * original_head)' como una firma posiblemente preferible para esa función (aunque es este caso peculiar _returning_ a 'node_t *' seguramente también es una posibilidad razonable). –