2010-01-19 10 views
3

En C, les tableaux sont transmis aux fonctions en tant que pointeurs. Les structures peuvent être passées aux fonctions soit par valeur, soit par adresse (pointeur). Y at-il une raison spécifique pour laquelle nous ne pouvons pas passer tableau par valeur, mais nous pouvons passer structre par valeur?Passage de tableaux et de structures à des fonctions

Répondre

6

En C, tout est passé par la valeur. Il y a une autre règle qui dit que dans la plupart des contextes, le nom d'un tableau est équivalent à un pointeur sur son premier élément. Passer un tableau à une fonction est un tel contexte.

Ainsi, le cas particulier n'est pas que les tableaux sont passés par référence, le cas particulier est the rule about arrays decaying to pointers. Cela donne l'impression qu'un tableau est passé par référence (ce qui est effectivement le cas, mais maintenant vous savez pourquoi!)

Le message dans mon lien ci-dessus explique plus en détail le type d'un tableau dans différents contextes.

+0

Les pointeurs sont passés par val. int * p1, int * p2; p1 = p2; il n'y a pas de références ici. l'adresse est copiée de p2 à p1. –

+0

Oui, les pointeurs sont passés par valeur, comme tout le reste. Pour les tableaux, l'effet * est comme s'ils avaient été passés par référence, mais à cause de la "règle" sur les tableaux se décomposant en pointeurs. Bien sûr, la valeur de pointeur du premier élément du tableau est passée par valeur, mais cela n'a pas d'importance dans ce cas. –

+0

Merci Alok! Explication dans le message pointé a été très utile – cppdev

Questions connexes