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
3
A
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.
Questions connexes
- 1. C++ tableaux de syndicats et de structures
- 2. Passage de structures à l'aide de sento()
- 3. passage des tableaux aux fonctions par leurs noms dans C
- 4. Utiliser des pointeurs avec des fonctions et des structures
- 5. Fonctions auxiliaires pour le regroupement de tableaux de structures (avec des pointeurs)
- 6. initialisation structures/tableaux emboîtés
- 7. tableaux de structures besoin de conseils
- 8. Fonctions et tableaux de l'accesseur PHP
- 9. structures dans les tableaux
- 10. scala dynamique tableaux multidimensionnels mutables comme des structures de données
- 11. Problème lors du passage de tableaux de C# à C++
- 12. Problèmes avec des structures avec des pointeurs vers des tableaux d'autres structures en C
- 13. Structures de tableaux d'octets à envoyer sur les sockets
- 14. aide avec des pointeurs et des structures et des tableaux dans c
- 15. Passage des fonctions membres en C#
- 16. structures et structures d'initialisation de nidification
- 17. mémoire Allouer aux structures de pointeur à l'intérieur des structures
- 18. Transmettre des tableaux à des fonctions SQL à partir de .NET C#
- 19. jQuery/JavaScript - passage de variables aux fonctions
- 20. Comparaison des méthodes de référencement de tableaux
- 21. Passage de tableaux associatifs PHP vers et à partir de XML
- 22. Fonctions auxiliaires et méthodes prototypes pour remplacer les structures lourdes?
- 23. Fonctions acceptant les types de tableaux C/C++
- 24. Tous les membres des structures et des tableaux suivants sont-ils initialisés avec zéro?
- 25. Fortran structures et pointeurs
- 26. Appelez C dll fonctions, structures et rappels en C#
- 27. Structures Lua et Alien
- 28. S'il vous plaît aider avec le passage des tableaux multidimensionnels
- 29. Dans zsh, comment transmettre des tableaux anonymes dans des fonctions?
- 30. Alternative au passage des variables globales autour des classes et des fonctions
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. –
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. –
Merci Alok! Explication dans le message pointé a été très utile – cppdev