Come sono passati array?
-
23-09-2019 - |
Domanda
sono array passati per difetto di rif o il valore? Grazie.
Soluzione
sono passati come puntatori. Questo significa che tutte le informazioni circa la dimensione dell'array è perduto. Si sarebbe molto meglio consiglia di utilizzare std :: vettori, che possono essere passati per valore o per riferimento, come si sceglie, e che quindi conservano tutte le loro informazioni.
Ecco un esempio di passare un array a una funzione. Nota dobbiamo specificare il numero di elementi in particolare, come sizeof (p) darebbe la dimensione del puntatore.
int add( int * p, int n ) {
int total = 0;
for ( int i = 0; i < n; i++ ) {
total += p[i];
}
return total;
}
int main() {
int a[] = { 1, 7, 42 };
int n = add( a, 3 );
}
Altri suggerimenti
In primo luogo, non è possibile passare un array in base al valore, nel senso che una copia della matrice è fatta. Se avete bisogno di tale funzionalità, uso o std::vector
boost::array
.
normalmente, un puntatore al primo elemento viene passato per valore. La dimensione della matrice si perde in questo processo e deve essere trasmesso separatamente. Le seguenti firme sono tutte equivalenti:
void by_pointer(int *p, int size);
void by_pointer(int p[], int size);
void by_pointer(int p[7], int size); // the 7 is ignored in this context!
Se si desidera passare per riferimento, la dimensione è parte del tipo:
void by_reference(int (&a)[7]); // only arrays of size 7 can be passed here!
Spesso si combinano passaggio per riferimento con i modelli, in modo da poter utilizzare la funzione con differenti dimensioni note statico:
template<size_t size>
void by_reference(int (&a)[size]);
Spero che questo aiuti.
array sono speciali: sono sempre passate come un puntatore al primo elemento della matrice
.