2016-07-05 6 views
3

Ich habe ein Problem mit einem Array an eine Funktion übergeben und dann ändern. Zum Beispiel:Ändern eines Zeigers auf ein Array in einer Funktion

void foo(int ** a) { 
    int * b = new int[3] 
    //Initialize b, i.e b = {3, 2, 1} 
    a = &b; 
    //*a = {3, 2, 1} 
} 

int * c = new int[3] 
//Initialize c; c = {1, 2, 3} 
foo(&c); 
// c is still {1, 2, 3}. Why? 

Ich bin nicht wirklich sicher, warum c nicht als b auf das gleiche Array nicht zeigen.

+4

'* a = b;' Sollte funktionieren. Obwohl ich nicht sicher bin, was Sie versuchen zu tun. – Arunmu

+0

@Arunmu Ja, das funktioniert, danke. –

+0

@MarkoStojanovic Ihre Frage ist wenig ähnlich dem Verhalten in [dieser] (http://stackoverflow.com/questions/4776010/pass-by-reference-and-value-with-pointers) Frage so wird es Ihnen auch helfen verstehe dein Problem :) –

Antwort

5

a hat den Typ int** und es ist nach Wert übergeben, so dass es nicht ändern modifiziert c.

es zu ändern, müssen Sie dies tun:

*a = b; 

Auf diese Weise wird die Adresse der b die von *a (die c entspricht) weist Variablen zuweisen, so werden sie auf den Punkt gleiche Anordnung.

+0

Vielen Dank. Ich habe vergessen, dass die Position von "c" als Wert übergeben wird, also dachte ich, dass "* a = b" und "a = & b" gleichwertig wären. –

Verwandte Themen