Maison >développement back-end >C++ >Pourquoi les longueurs de tableau dans les signatures de fonctions C et C semblent-elles être ignorées ?
Longueurs de tableau dans les signatures de fonction : une curiosité syntaxique
Malgré la présence apparente de longueurs de tableau dans les signatures de fonction en C et C, ces longueurs sont effectivement ignorées. Ce comportement a déconcerté les développeurs et soulève des questions sur son objectif.
L'illusion du contrôle de la longueur des tableaux
Considérez l'extrait de code C suivant :
#include <stdio.h> int dis(char a[1]) { return strlen(a); } int main() { char b[4] = "abc"; int c = dis(b); printf("%d\n", c); return 0; }
Dans ce code, la fonction dis attend un tableau de caractères d'une longueur de 1 ([1]). Cependant, l'utilisateur transmet un tableau d'une longueur de 4 (b). Étonnamment, le code se compile et s’exécute sans générer d’erreurs. Cela suggère que la longueur du tableau spécifiée dans la signature de la fonction n'est pas appliquée.
La vraie nature des passages de tableau
En C et C, les tableaux ne sont pas transmis par valeur . Au lieu de cela, un pointeur vers le premier élément du tableau est transmis. Par conséquent, la spécification de la longueur d'un tableau dans une signature de fonction devient redondante, car cette information peut être dérivée du pointeur.
La justification historique
La décision d'autoriser Les spécifications de longueur de tableau dans les signatures de fonctions ont été faites dans les premiers jours du C, probablement en raison de l'héritage des langages antérieurs. Bien que cette syntaxe ait été maintenue pour des raisons de compatibilité, elle est devenue source de confusion pour les développeurs.
Conclusion
La présence de longueurs de tableaux dans les signatures des fonctions C et C est une bizarrerie syntaxique qui n'applique pas réellement les longueurs des tableaux. Ce comportement est dû au mécanisme de transmission sous-jacent, qui implique des pointeurs vers des éléments de tableau plutôt que vers les tableaux eux-mêmes. Bien que cette syntaxe puisse sembler inutile, ses origines historiques ont consolidé sa place dans les langages de programmation C et C modernes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!