Pasar una matriz por referencia

¿Cómo funciona una matriz asignada estáticamente por referencia?

void foo(int (&myArray)[100]) { } int main() { int a[100]; foo(a); } 

¿ (&myArray)[100] tiene algún significado o es solo una syntax para pasar cualquier matriz por referencia? No entiendo los paréntesis separados seguidos de grandes corchetes aquí. Gracias.

Es una syntax para las referencias de matriz: debe usar (&array) para aclararle al comstackdor que desea una referencia a una matriz, en lugar de la matriz de referencias (no válida) int & array[100]; .

EDIT: alguna aclaración.

 void foo(int * x); void foo(int x[100]); void foo(int x[]); 

Estas tres son formas diferentes de declarar la misma función. Todos son tratados como tomar un parámetro int * , puede pasar cualquier matriz de tamaño a ellos.

 void foo(int (&x)[100]); 

Esto solo acepta matrices de 100 enteros. Puede usar sizeof forma segura en x

 void foo(int & x[100]); // error 

Esto se analiza como una “matriz de referencias”, que no es legal.

Es solo la syntax requerida:

 void Func(int (&myArray)[100]) 

^ Pase matriz de 100 int por referencia el nombre de los parámetros es myArray ;

 void Func(int* myArray) 

^ Pase una matriz. La matriz se descompone en un puntero. Por lo tanto, pierde información de tamaño.

 void Func(int (*myFunc)(double)) 

^ Pase un puntero a la función. La función devuelve un int y toma un double . El nombre del parámetro es myFunc .

Es una syntax En la función argumentos int (&myArray)[100] paréntesis que encierran &myArray son necesarios. si no los utiliza, pasará una array of references y esto se debe a que el subscript operator [] tiene mayor precedencia sobre el & operator .

Eg int &myArray[100] // array of references

Entonces, al usar type construction () le dices al comstackdor que quieres una referencia a una matriz de 100 enteros.

Eg int (&myArray)[100] // reference of an array of 100 ints

Las matrices se pasan por defecto por punteros. Puede intentar modificar una matriz dentro de una llamada de función para una mejor comprensión.