stringa * e stringa & differiscono in un paio di modi. Prima di tutto, il puntatore punta alla posizione dell'indirizzo dei dati. Il riferimento punta ai dati. Se avete avuto la seguente funzione:
int foo(string *param1);
Si dovrà verificare nella dichiarazione di funzione per fare in modo che param1 indicò un percorso valido. Comparativamente:
int foo(string ¶m1);
Qui, è responsabilità del chiamante per assicurarsi che il indicò dati sono validi. Non è possibile passare un valore "NULL", ad esempio, nella seconda funzione in alto.
Per quanto riguarda la seconda domanda, circa i valori metodo di ritorno essendo un punto di riferimento, considerare i seguenti tre funzioni:
string &foo();
string *foo();
string foo();
Nel primo caso, si sarebbe tornato un riferimento ai dati. Se la dichiarazione di funzione si presentava così:
string &foo()
{
string localString = "Hello!";
return localString;
}
Si sarebbe probabilmente ottenere alcuni errori di compilazione, dal momento che si restituisce un riferimento a una stringa che è stato inizializzato nello stack per quella funzione. Al ritorno della funzione, quell'ubicazione dei dati non è più valida. In genere, si desidera restituire un riferimento a un membro della classe o qualcosa del genere.
La seconda funzione in alto restituisce un puntatore nella memoria effettiva, quindi rimarrebbe lo stesso. Dovresti controllare i puntatori NULL, però.
Infine, nel terzo caso, i dati restituiti verrebbero copiati nel valore di ritorno per il chiamante. Quindi, se la funzione è stata in questo modo:
string foo()
{
string localString = "Hello!";
return localString;
}
saresti a posto, dal momento che la stringa "Ciao" sarebbe stato copiato nel valore di ritorno per tale funzione, accessibili nello spazio di memoria del chiamante.
Correlato: http://stackoverflow.com/questions/57483/difference-between-pointer-variable-and-reference-variable-in-c –
L'operatore '&' * fa la stessa cosa in C e C++ : prende l'indirizzo di un oggetto. Il prototipo '&' in a function non è un operatore. Correggerò il titolo –