235 votes

Passage d'un tableau par référence

Comment passer un allouée statiquement tableau par des ouvrages de référence?

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

int main()
{
    int a[100];
    Func(a);
}

N' (&myArray)[100] ont aucun sens ou c'est juste une syntaxe de passer un tableau par référence? Je ne comprends pas séparer les parenthèses, suivie par de grands crochets ici. Merci.

281voto

Erik Points 38942

C'est une syntaxe pour les références de tableau - vous devez utiliser (&array) pour préciser au compilateur que vous voulez une référence à un tableau, plutôt que de la (non valide) tableau de références int & array[100];.

EDIT: Quelques précisions.

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

Ces trois sont les différentes façons de déclarer la même fonction. Ils sont tous traités comme de prendre un int * paramètre, vous pouvez passer n'importe quel tableau de taille pour eux.

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

Cela ne accepte un tableau de 100 entiers. Vous pouvez utiliser en toute sécurité sizeof sur x

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

C'est analysée comme un "tableau de références" - qui n'est pas légal.

63voto

Loki Astari Points 116129

C'est juste la syntaxe requise:

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

Pass tableau de 100 int en référence le nom des paramètres est montableau;

void Func(int* myArray)

Passer un tableau. Tableau se désintègre à un pointeur. Ainsi, vous perdez des informations sur la taille.

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

Passer un pointeur de fonction. La fonction renvoie un int et prend un double. Le nom du paramètre est mafonction

30voto

cpx Points 5936

C'est une syntaxe. Dans les arguments de la fonction int (&myArray)[100] des parenthèses qui entourent l' &myArray sont nécessaires. si vous ne les utilisez pas, vous serez en passant un array of references c'est parce que l'indice de l'opérateur ont une priorité plus élevée au cours & operator.

E. g. int &myArray[100] // array of references

Ainsi, en utilisant type construction () vous indiquer au compilateur que vous voulez une référence à un tableau de 100 entiers.

E. g int (&myArray)[100] // reference of an array of 100 ints

0voto

eggie5 Points 1193

Vous n'avez même pas besoin de l' &myArray parce qu'ils sont passés par référence (en substance) par défaut dans C.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X