2014-05-24 18 views
6

Ciao io sono principiante in C++, qualcuno può spiegare a me questoAssegnazione di un array ad un altro array C++

char a[]="Hello"; 

char b[]=a; // is not legal 

mentre,

char a[]="Hello"; 

char* b=a; // is legal 

Se un array non può essere copiato o assegnato ad un altro array , perché è possibile passare come parametro, dove una copia del valore passato viene sempre eseguita nel metodo

void copy(char[] a){....} 

char[] a="Hello"; 

copy(a); 
+0

È 'pass by reference' –

+1

Le strane regole sugli array sono ereditate dalla programmazione C degli anni '70 e nessuno le ha mai modificate perché si sarebbe rotto troppo codice esistente. Invece, si scoraggia dall'utilizzare gli array in C++; usa invece 'std :: vector' che ha il comportamento degli array nella maggior parte dei linguaggi di alto livello. –

+0

[Questa risposta] (https://stackoverflow.com/questions/4810664/how-do-i-use-arrays-in-c?rq=1) è piuttosto lunga, ma vale la pena leggerla. Tutte le tue domande hanno una risposta. – Praetorian

risposta

0

La matrice viene convertita in modo invisibile (implicitamente) in un puntatore nella dichiarazione della funzione e il puntatore viene copiato. Ovviamente il puntatore copiato punta alla stessa posizione dell'originale, quindi è possibile modificare i dati nell'array originale tramite il puntatore copiato nella propria funzione.

7

Non sta copiando l'array; lo sta trasformando in un puntatore. Se lo si modifica, vedrete voi stessi:

void f(int x[]) { x[0]=7; } 
... 
int tst[] = {1,2,3}; 
f(tst); // tst[0] now equals 7 

Se è necessario copiare una matrice, utilizzare std::copy:

int a1[] = {1,2,3}; 
int a2[3]; 
std::copy(std::begin(a1), std::end(a1), std::begin(a2)); 

Se vi trovate a fare questo, si potrebbe desiderare di utilizzare un std::array.

Problemi correlati