Domanda

sono array passati per difetto di rif o il valore? Grazie.

È stato utile?

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

.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top