Ho notato che è un linguaggio comune in C accettare un puntatore un-malloc
come secondo argomento invece di restituire un puntatore. Esempio:puntatore come secondo argomento invece di restituire il puntatore?
/*function prototype*/
void create_node(node_t* new_node, void* _val, int _type);
/* implementation */
node_t* n;
create_node(n, &someint, INT)
Invece di
/* function prototype */
node_t* create_node(void* _val, int _type)
/* implementation */
node_t* n = create_node(&someint, INT)
Quali sono i vantaggi e/o svantaggi di entrambi gli approcci?
Grazie!
MODIFICA Grazie a tutti per le vostre risposte. Le motivazioni per la scelta 1 mi sono molto chiare ora (e devo sottolineare che l'argomento del puntatore per la scelta 1 dovrebbe essere malloc'd contrariamente a quello che pensavo inizialmente).
Questo. La capacità di fare 'struct thing t; init_thing (&t); 'è bello – dmckee
Se volessi scrivere una funzione per copiare una lista collegata, avrei un prototipo di funzione come' void copy_list (node_t * new_head, node_t * original_head) '? Penso che avrei dovuto malloc a nuovo nodo per ognuno nella lista originale e aggiungilo alla 'fine' di new_head (copia val e type ma dagli un nuovo valore di puntatore 'node_t * next'). E 'questo il modo migliore per farlo? – Tyler
@ Tyler, considera 'copy_list (node_t ** new_head, const node_t * original_head)' come una firma preferibile per quella funzione (anche se questo caso particolare _returning_ a 'node_t *' è sicuramente anche una ragionevole possibilità.) –