Programmation C: comment utiliser des pointeurs dans les fonctions

Un pointeur est un type de variable. En tant que tel, il peut facilement être jeté hors d'une fonction dans la programmation C. Encore plus excitant, un pointeur peut se balader d'une fonction comme une valeur de retour. Souvent, ces astuces sont les seuls moyens pour obtenir des informations vers ou à partir d'une fonction.

Sommaire

Comment passer un pointeur à une fonction

Le grand avantage de passer un pointeur vers une fonction est que l'information qui est modifié ne doit pas être retourné. Voilà parce que la fonction fait référence à une adresse mémoire, pas directement une valeur. En utilisant cette adresse, l'information peut être manipulée sans être retourné. Pointant à une remise démontre.

POINTAGE au rabais

rabais vide #include (float * a) -int main () {float = prix de 42,99-printf ("Le point coûte $%. 2f n", prix) -Discount (prix) -printf ("Avec la réduction, qui est . $% 2f n ", prix) -retour (0) -} rabais vide (float * a) {* a = * a * 0.90-}

Dans la ligne 3 du pointage au rabais, la fonction de réduction () est un prototype. Il requiert un type de flotteur de variable pointeur comme seul argument.

Ligne 10 passe l'adresse du prix variable pour la fonction de réduction (). Le signe pour cent obtient l'emplacement de mémoire de la prix variable.

Dans la fonction, variable pointeur un est utilisé pour avoir un aperçu de la valeur à l'emplacement de mémoire qui est passé.

Exercice 1: Tapez le code source à partir de pointage à un rabais dans votre éditeur. Construire et exécuter le programme.




Exercice 2: Modifier votre code source de l'exercice 1 de sorte qu'une variable float de pointeur p est déclaré dans la fonction main (). Initialiser p au prix l'emplacement de la variable, et ensuite passer p à la fonction de réduction ().

Exercice 3: Construire un nouveau projet avec deux fonctions: créer () et show (). La fonction de création () reçoit un pointeur vers un tableau de dix entiers et remplit ce tableau avec des valeurs aléatoires dans la plage de 0 à 9. La fonction show () reçoit le même tableau et affiche tous les dix éléments.

Comment retourner un pointeur de fonction

Les fonctions sont connus par leurs types, tels que int ou char ou même nulle. Vous pouvez également déclarer des fonctions de pointeur, qui renvoient un emplacement de mémoire en tant que valeur. Il suffit de déclarer la fonction comme étant d'un type de pointeur, comme

char * monstre (void)

Dans cet exemple, la fonction monstre () est déclarée. Il ne requiert aucun argument, mais renvoie un pointeur sur un tableau de caractères - une valeur de chaîne.

Voici une autre différence avec les fonctions qui retournent des pointeurs: La valeur qui est renvoyée doit être déclarée comme une variable statique. Gardez à l'esprit que les variables sont locales à leurs fonctions. Vous devez conserver les données dans la variable par le déclarant comme un type statique pour que son contenu ne sont pas supprimés lorsque la fonction arrête. Inverser une chaîne fournit un exemple.

Inverser une STRING

omble #include * strrev (char * entrée) -int main () {char string [64] -printf ("Tapez du texte:") -fgets (String, 62, stdin) -puts (strrev (string)) - retour (0) -} char * strrev (char * entrée) Sortie de {static char [64] -char * i * oi = o = entrées-sorties-tout (* i ++ = ' n'!) - i --- while (i> = entrée) * o * = ++ i --- * o = ' 0'-retour (sortie) -}

Inverser une chaîne peut être assez déroutant. Faites attention!

Ligne 3 prototypes de la fonction strrev (). Elle renvoie un pointeur - dans ce cas, l'adresse d'un tableau de char ou de la ficelle.

La fonction main () à la ligne 5 est assez facile à comprendre. Entrée est recueillie par les fgets function () à la ligne 10. Il est passé à strrev () à la ligne 11 à l'intérieur des puts () fonction.

La fonction strrev () commence à la ligne 16. Il requiert un pointeur de char comme son argument, qui est désigné comme entrée dans la fonction. Le tampon de sortie est créé à la ligne 18, et il est statique, il ne disparaît pas lorsque la fonction est effectuée. Ligne 19 déclare deux pointeurs Char: i et o.

La première boucle while à 23 Ligne trouve le caractère de nouvelle ligne à la fin de la chaîne d'entrée. La je marches variables à travers la chaîne d'un caractère à la fois.

Après avoir trouvé le saut de ligne, le je pointeur contient l'adresse du caractère suivant en entrée, ce qui est probablement pas ce que vous voulez. Donc, la déclaration à la ligne 25 jusqu'à dos je pour pointer vers le dernier caractère de la chaîne avant le saut de ligne.

Au début de la boucle while à la ligne 27, pointeur o maintient la base de la mémoire tampon de sortie, le premier caractère, et le pointeur je détient la dernière. Essayez de penser à cette situation je debout dans la partie supérieure d'un escalier et o debout au fond.

La boucle while tourne jusqu'à ce que l'adresse de pointeur je correspond à l'adresse au début de la chaîne d'entrée. Comme je est décrémenté, les caractères à l'adresse je sont copiés pour répondre o. Au sens figuré, je marches dans les escaliers, et o marches vers le haut.

Ligne 29 coiffe la chaîne de sortie avec un caractère NULL. Voilà quelque chose que vous devez vous rappeler lorsque vous créez des chaînes en utilisant des pointeurs.

La déclaration de retour à la ligne 31 envoie l'adresse de la mémoire tampon de sortie, la chaîne inversée, de retour à la déclaration d'appel.

Exercice 4: Tapez le code source de l'inversion d'une chaîne dans votre éditeur. Lorsque vous tapez le code, ajouter vos propres commentaires décrivant ce qui se passe. Sentez-vous libre d'utiliser le texte comme un guide. Construire et exécuter le programme.


» » » » Programmation C: comment utiliser des pointeurs dans les fonctions