Bonjour et bienvenue à nouveau. Dans cette conférence, je veux fournir une
démonstration de notre défi précédent qui consistait à
comprendre le passage par référence, en
ayant un paramètre à l'intérieur d'une fonction prendre un pointeur.
Alors créons un nouveau projet. Nous appellerons celui-ci un pointeur
par référence car c'est ce qu'il montre, des éléments
de base ici, un nouveau projet, une
application console c. Assez simple ici.
Appelons simplement ce pointeur de soulignement
par référence.
Encore une fois, démontrer comment nous pouvons utiliser des paramètres à l'intérieur d'une fonction
pour transmettre des données et comment ces données seront ensuite modifiées
en dehors de la fonction.
Donc, la première chose que nous allons faire est de créer notre déclaration de fonction,
notre prototype de fonction. C'est toujours agréable à faire
pour que vous puissiez appeler n'importe où dans votre programme. Nous allons simplement l'appeler carré.
L'essentiel dans cette déclaration de fonction est qu'elle va prendre un pointeur.
Donc, il va juste prendre un pointeur de fin, donc nous allons simplement dire int star
et ensuite vous pouvez lui donner le nom que vous voulez et vous le terminez par le point-virgule.
Et notre fonction principale, d'abord
nous allons faire est de créer simplement une variable entière régulière
et nous dirons simplement int num et nous dirons simplement le coder en dur à 9.
Et ce que nous allons faire, c'est appeler notre fonction carrée.
Notre fonction carrée ne retournera aucune donnée, elle sera nulle.
Nous devons maintenant lui passer une adresse car notre fonction carrée sur la ligne 4 prend un pointeur.
Donc, nous ne pouvons pas passer un num, nous devrions en fait passer l'adresse de num,
puis nous le terminerions par un point-virgule. Nous appelons donc la fonction en
utilisant le nom de la fonction, puis en passant l'adresse de la variable.
Parce que la variable ici dans une ligne huit n'est pas un pointeur.
Ensuite, nous pouvons simplement afficher la valeur de num.
Et encore une fois, ce que vous remarquerez ici, c'est que
nous transmettons l'adresse, si nous modifions les données dans la fonction elle-même pour cette variable,
cela va changer en dehors de celle-ci. Donc, ici, nous allons dire que
le carré du nombre donné est et qu'il est juste de dire pour
cent d, nous ajouterons un saut de
ligne et nous allons simplement imprimer num, et num ne sera
pas 9. , Je vais vous en dire beaucoup.
Et puis nous retournerons simplement 0 pour notre fonction régulière.
Alors maintenant, nous devons réellement implémenter la fonction, la définir.
Pour le définir, je vais juste dire carré vide.
Nous savons que cela prend un pointeur entier, donc je vais dire int star x.
Et maintenant, nous voulons simplement le multiplier par lui-même.
Mais nous voulons nous assurer de ne pas changer l'adresse.
Donc, ce que nous pourrions faire ici, c'est que nous pourrions en faire une
constante, mais vous voudriez mettre la constante après
le type de données parce que nous ne voulons pas
changer la valeur de ce qu'est x ou l'adresse de ce qu'il pointe. on pourrait dire int constant.
Si nous ne voulions pas changer la
valeur de x, nous dirions constant. Mais nous voulons changer la valeur de x, nous allons la mettre au carré par elle-même.
Donc, pour le mettre au carré par lui-même, tout d'abord, ce que nous
voulons changer, c'est la valeur ultime de x. Nous devons donc utiliser
l'opérateur d'indirection. Nous devons le dé-référencer avec l'astérisque.
Et puis nous allons juste dire égaux, nous ne voulons pas
faire x fois x parce que cela va simplement multiplier les adresses. X est un pointeur, nous ne voulons pas simplement obtenir
la valeur de x, nous voulons obtenir la valeur de ce vers quoi x pointe.
Encore une fois, nous devons le dé-référencer et
ensuite nous allons le multiplier par lui-même. Nous allons le dé-référencer deux fois.
Ce serait peut-être une bonne idée
de mettre cela entre parenthèses afin de comprendre très facilement ce qui se passe ici.
Vous supprimez le référencement du pointeur, obtenez la valeur de celui-ci, puis
multipliez par sa valeur, puis ajoutez simplement le point-virgule, et c'est tout
ce que vous avez à faire. Ainsi, lorsque nous exécuterons ce programme, il
imprimera 81.
Il va afficher la valeur de num. Num va changer à l'intérieur du carré
car nous y passons l'adresse.
Nous ne sommes pas en mesure de modifier réellement la valeur du
pointeur, nous avons donc la constante après le type.
Donc, ici, nous disons build et il semble que
nous n'avons pas changé la déclaration.
Et maintenant, nous voulons simplement nous assurer que tout
le reste est correct.
Si vous voulez que le pointeur soit constant,
vous devez le placer après l'astérisque.
Donc, int start constant signifie
que vous ne pouvez pas changer la valeur
de x, qui est l'adresse de num.
Si nous mettons const avant l'int
ou après l'entrée avant l'astérisque, cela signifie que vous
ne pouvez pas changer la valeur de ce vers quoi le pointeur pointe.
Alors maintenant, lorsque nous exécutons cela, nous devrions voir la sortie 81.
Encore une fois, ce
que cela nous dit, c'est que nous avons modifié
les données. Cette variable, cette
variable locale num a été modifiée à l'intérieur de la fonction et sa valeur a changé.
Ce n'est pas normal. Nous n'avons pas appris ce concept jusqu'à présent. C'est passé par référence.
Mais en c ce qui se passe, c'est que vous transmettez une copie de l'adresse.
C'est pourquoi c'est vraiment redondant, nous n'avons même pas besoin de la constante car même
si nous devions changer la valeur du pointeur, c'est une copie
de la valeur du pointeur, donc vous n'avez pas vraiment besoin de le faire.
Maintenant, si nous ne voulions pas utiliser un nombre existant, nous pourrions créer un pointeur,
nous devons juste lui allouer de la mémoire.
Donc, ce que nous aurions à faire ici, c'est que nous pourrions créer un numéro d'étoile int.
Mais ce que nous aurions à faire, c'est d'abord de lancer le malloc parce
que malloc revient avec un pointeur vide, mais
nous pouvons allouer de la mémoire de manière dynamique.
Et ici, nous devrions dire vraiment simplement
parce que nous créons un entier, nous pourrions simplement dire la taille de
int et cela nous allouerait de la mémoire.
Et puis, tout ce que nous aurions à faire est de passer au carré num.
Et puis, lorsque
nous construisons cela, cela ferait la même chose
mais maintenant, cela n'a pas non plus
de valeur pour num, donc
je ne saurais pas vraiment quoi calculer, donc vous
devriez réellement attribuer la valeur de num nous allons
dire ici quatre, vous la dé-référencez. Et maintenant, lorsque vous le construisez et
l'exécutez, vous devriez obtenir 16.
Maintenant, la seule chose ici est que nous voulons imprimer la valeur, donc nous voulons dire num.
Et puis, lorsque nous l'exécutons, nous devrions voir 16.
Et c'est vraiment le même type de comportement,
et nous en voyons 16.
La seule différence ici était que nous allouions de la
mémoire pour ce que le point pointe plutôt que de simplement pointer vers un
emplacement mémoire existant avec une esperluette.
Encore une fois, des choses importantes à noter ici, ce nombre change en
dehors de la fonction. Ceci est
passé par référence comprendre. Là où nous utilisons l'opérateur de dé-référence,
l'opérateur d'indirection pour obtenir la valeur vers laquelle pointe le point.
Comprenez que si la fonction prend un pointeur et que nous avons
un pointeur, nous pouvons simplement envoyer le nom.
Si cela ne prend pas de
pointeur et qu'il s'agit en fait d'une valeur,
nous devons la dé-référencer. Et c'est comme le scanf.
Alors ici, il faudrait dire l'esperluette.
Et puis aussi lorsque nous l'imprimerons, nous n'aurions pas
à dé-référencer quoi que ce soit car ce n'est pas un pointeur et
alors ce serait la même chose ici.
Et puis comprendre const deux. Const avant l'étoile int indique que la
valeur vers laquelle pointe le point ne peut pas changer.
Le const après le début int indique que l'adresse du pointeur ne peut pas changer la valeur du pointeur.
J'espère que cela a été utile.
Encore une fois, jouez avec ça, changez de syntaxe, dérangez comme je l'ai fait.
Cela vous aidera à apprendre beaucoup. Merci.