Pergunta

As matrizes são passadas por padrão por referência ou valor?Obrigado.

Foi útil?

Solução

Eles são passados ​​como ponteiros.Isso significa que todas as informações sobre o tamanho do array serão perdidas.Seria muito melhor usar std::vectors, que podem ser passados ​​por valor ou por referência, conforme você escolher, e que, portanto, retêm todas as suas informações.

Aqui está um exemplo de passagem de um array para uma função.Observe que temos que especificar o número de elementos especificamente, pois sizeof(p) daria o tamanho do ponteiro.

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 );
}

Outras dicas

Primeiro, você não pode passar uma matriz por valor no sentido de que uma cópia da matriz é feita. Se você precisar dessa funcionalidade, use std::vector ou boost::array.

Normalmente, um ponteiro para o primeiro elemento é passado pelo valor. O tamanho da matriz é perdido nesse processo e deve ser passado separadamente. As seguintes assinaturas são todas equivalentes:

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 você deseja passar por referência, o tamanho faz parte do tipo:

void by_reference(int (&a)[7]);   // only arrays of size 7 can be passed here!

Muitas vezes, você combina passa por referência com modelos, para poder usar a função com diferentes tamanhos estaticamente conhecidos:

template<size_t size>
void by_reference(int (&a)[size]);

Espero que isto ajude.

As matrizes são especiais: elas sempre são passadas como um ponteiro para o primeiro elemento da matriz.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top