Maison >développement back-end >Tutoriel C#.Net >Comment renvoyer un tableau à partir d'une fonction personnalisée en langage C (explication détaillée avec images et texte)
Récemment, j'ai vu des questions de camarades de classe, et l'une d'entre elles mentionnait : Comment renvoyer un tableau dans une fonction ?
Puis-je écrire une valeur de retour de type char * directement dans une fonction personnalisée et la renvoyer directement ? , le code est le suivant :
renvoie directement le nom du tableau str (notez qu'il y a il n'est pas nécessaire d'ajouter &, mais de nombreux étudiants font cette erreur)
Mais en fait, le résultat exécuté n'est pas normal. Nous essayons de sortir dans la fonction appelante, et nous pouvons voir. que le résultat n'est pas le contenu original (bien sûr, la sortie de votre ordinateur. Ce n'est peut-être pas comme ça)
comme suit :
La raison est que vous pouvez commencer avec les attributs de str str lui-même est une variable locale dans une fonction personnalisée. est un tableau de cent octets. Son cycle de vie dépendra bien sûr de l'endroit où il se trouve. Avec les fonctions, comme le dit le proverbe, "Un tour pour l'empereur et un courtisan", avec la fin de l'appel de fonction amusant. , diverses variables locales qu'il contient seront également récupérées par le système. Bien sûr, les cent octets du tableau str seront également récupérés, donc la chaîne "Bonjour www.dotcpp.com" a été effacée ! Naturellement, ce que vous affichez dans la fonction principale ne sera certainement pas le contenu original !
Et ça, je comprends !
Cependant, ce n'est pas encore fini, certains étudiants continuent de se demander, pourquoi puis-je le changer pour la méthode d'écriture suivante ?
Comme indiqué ci-dessous :
Réponse : Dans ce cas, bien que str soit également la variable locale n'est pas un tableau, mais un pointeur, seulement quatre octets. Il stocke la chaîne "Bonjour www.dotcpp.com" dans la zone constante, mais veuillez noter que cette chaîne est dans la zone constante, pas la partie qui appartient au plaisir. La fonction est lisible par tout le programme, elle existe donc toujours après le retour. Ce qui est renvoyé est la valeur en str, qui est la première adresse de la chaîne "Bonjour www.dotcpp.com". transférer l'adresse de cette chaîne de str à p via la valeur de retour.
Vous pouvez aussi utiliser une analogie : avant, seule la fonction fun connaissait cette chaîne, mais maintenant elle est sur le point de mourir. Avant de mourir, il a avoué : "Je meurs, dépêche-toi. et mettez 'Bonjour l'adresse du trésor de www .dotcpp.com (la première adresse de la chaîne) est transférée à la fonction principale ! "
Puis revenez vite et revenez à la fonction principale ! Puis il disparaît...
Puis, une fois la fonction principale obtenue, vous saurez...
Pouvez-vous comprendre ceci chemin?
La dernière partie de l'analyse inverse du langage C impliquera également les principes ici, et vous pourrez l'apprendre et la comprendre en profondeur.
En parallèle, dans le prochain article nous vous expliquerons comment implémenter le problème de transfert de tableau des fonctions personnalisées !
Grâce à l'explication de l'article précédent, je pense que vous avez compris les problèmes et les raisons du renvoi direct de tableaux. Aujourd'hui, nous allons expliquer en détail les méthodes courantes de renvoi de tableaux dans les fonctions.
Pour de tels problèmes, les scénarios d'application visent souvent à résoudre la communication entre les fonctions. Par exemple, les données de résultat traitées dans une fonction doivent être transmises à une autre fonction, puis De manière générale, il existe trois types de résumés :
1 Utiliser directement les variables globales : Cette méthode est la plus pratique, mais cette méthode rompt la communication et l'encapsulation entre les fonctions. Je pense que son utilisation n’est donc pas recommandée et dépasse le cadre de la discussion d’aujourd’hui.
2. Solution en ouvrant dynamiquement de la mémoire dans la zone du tas : En langage C, nous utilisons généralement malloc pour ouvrir dynamiquement de la mémoire dans la zone du tas, et utilisons la zone du tas pour " déployez maintenant lorsqu'il est utilisé, et manuellement après utilisation, fonction « Reprendre » pour obtenir une gestion flexible. C'est une méthode couramment utilisée dans le développement réel, et c'est également notre contenu principal aujourd'hui.
3. Le pointeur de tableau est transmis par l'appelant : cette méthode ne nécessite pas d'adresse de retour de fonction, mais transmet directement l'adresse du tableau lors de l'appel et confie à l'appelé l'exécution. l'opération. Puisque cette variable locale appartient à l'appelant lui-même, donc même si l'appelé termine la libération de mémoire, le tableau ne sera pas affecté.
Expérimentons un par un. Pour la deuxième méthode, puisque la mémoire est allouée dynamiquement dans la zone du tas, la zone du tas ne veut pas que les variables locales soient stockées dans la zone de pile. dans la leçon précédente. Le système dépend de son cycle de vie. Récupération automatique, mais développement manuel et publication manuelle, afin que le problème puisse être complètement évité :
A noter que : pensez à le libérer après utilisation pour éviter que la mémoire ne cède !
La troisième méthode : Bien que le tableau ne soit pas renvoyé dans la fonction, elle peut également résoudre le problème de communication du tableau. L'idée principale est de définir. le tableau dans le caller , puis transmettez l'adresse Puisque la mémoire appartient à l'appelant et non à l'appelé, peu importe si l'appelé libère la mémoire une fois l'appel terminé. L'exemple de programme et ses effets sont les suivants :
Un résumé de l'utilisation des tableaux de passage est généralement comme ci-dessus. Si vous avez des questions ou des doutes, n'hésitez pas à nous contacter. Vous pouvez nous contacter !
Merci à tous d'avoir lu, j'espère que vous en bénéficierez beaucoup.Tutoriel recommandé : "Langage C"
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!