Maison > développement back-end > C++ > Pourquoi les longueurs de tableau dans les signatures de fonctions C et C semblent-elles être ignorées ?

Pourquoi les longueurs de tableau dans les signatures de fonctions C et C semblent-elles être ignorées ?

Linda Hamilton
Libérer: 2024-12-15 06:07:13
original
755 Les gens l'ont consulté

Why Do Array Lengths in C and C   Function Signatures Seem to Be Ignored?

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;
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal