2015-06-02 12 views
5

A cosa serve il valore di ritorno di strrev()? Anche dopo aver invertito la stringa, il valore verrà modificato nella stringa specificata.Qual è l'uso del valore restituito in strrev()?

Es: char *strrev(char *src); Qui dopo che la stringa è stata invertita, l'output sarà presente nello src. In tal caso, a cosa serve restituire la stringa?

O il valore di ritorno o la stringa che stiamo passando agisce anche come uscita, è sufficiente. In tal caso, qual è l'uso del valore di ritorno di strrev()?

+2

Consente il concatenamento di chiamate che manipolano le stringhe – Baldrick

+3

Spoiler: non esiste _standard_ 'strrev()'. –

+4

È possibile utilizzare direttamente il risultato per ulteriori elaborazioni come ad esempio in 'printf ("% s \ n ", strrev (str));' o 'do_more_stuff (strrev (str))'. –

risposta

5

Per consentire il concatenamento.

Immaginate di voler invertire una stringa, quindi invertire nuovamente (esempio forzato, ma rende il punto). Con concatenamento, si può fare questo:

strrev(strrev(charBuffer)); 

Se sttrev restituito void, dovreste fare:

strrev(charBuffer); 
strrev(charBuffer); 

per ottenere lo stesso risultato.

Come @WernerHenze dice nel suo commento, ma consente anche di lavorare direttamente con l'uscita di chiamate di funzione, in questo modo:

printf("%s\n", strrev(charBuffer)); 

La possibilità di concatenamento dà sostanzialmente maggiore flessibilità al programmatore di come il codice è strutturato.

0

Il concatenamento ha più senso, ma può anche essere utilizzato in una micro-ottimizzazione improbabile. È possibile evitare di salvare un valore temporaneo nello stack durante la chiamata. Ad esempio .:

char *fn(char *s) { 
    strrev(s); 
    strlwr(s); 
    return strstr(s, "secret"); 
} 

Negli chiamate a strrev() e strlwr() è necessario tenere una copia di sicurezza di s per un uso successivo. È possibile eliminare questo registro Salva utilizzando:

char *fn(char *s) { 
    s = strrev(s); 
    s = strlwr(s); 
    return strstr(s, "secret"); 
} 

Come per la risposta concatenamento, si potrebbe anche usare:

char *fn(char *s) { 
    return strstr(strlwr(strrev(s)), "secret"); 
} 

ma che può essere un problema in codice più complesso.

Ho appena provato ed eliminato tre istruzioni mov. Sìì!!

Problemi correlati