Bonjour, et bienvenue à
nouveau Dans cette conférence, je veux fournir une démonstration
de notre défi pour l'arithmétique du pointeur et l'utilisation du modificateur constant.
Faisons apparaître des blocs de code. Je vais créer un nouveau projet. Nous allons nommer cet
exemple arithmétique à un pointeur.
Donc, ce que nous allons faire ici, c'est
que nous allons réellement déterminer la longueur d'une chaîne en utilisant l'arithmétique ponctuelle.
Donc, la première chose que je veux faire est de créer ma déclaration de fonction.
Cela va retourner la longueur de la chaîne. Il va donc avoir int
comme type de retour. Je vais l'appeler longueur de chaîne,
et cela va simplement prendre un pointeur, mais ce sera un pointeur constant.
Nous ne voulons pas changer la valeur de ce qui pointe.
Cela signifie que nous utiliserions la constante comme premier mot-clé, puis
nous spécifierions le type, qui est un caractère.
Et nous dirions étoile, et nous pouvons le nommer comme nous voulons, chaîne.
Encore une fois, juste pour répéter, si nous avions mis la constante ici à la
place, cela dirait que l'adresse du pointeur, la valeur
du pointeur ne peut pas changer.
Mais encore une fois, c'est un peu redondant et cela n'a pas vraiment besoin
d'être fait parce que nous faisons passer par valeur passage par copie.
Donc, vous avez de toute façon une copie de l'adresse, donc peu importe si vous la modifiez là-dedans.
Mais il est important de changer ce que vous pointez. Si vous ne voulez pas que
la valeur de ce que vous indiquez change, vous voulez absolument faire constamment ici,
et c'est important.
Alors maintenant, tout ce que nous avons à faire est de créer notre main.
créer notre main. Tout ce que nous allons
faire dans notre main est d'appeler string length,
une fonction de longueur de chaîne avec différentes chaînes.
Alors imprimons, et rappelez-vous, il renvoie un entier pour que nous puissions dire pour cent d et nous
allons simplement afficher la longueur de quelques chaînes que nous transmettons.
Nous allons donc appeler string length, et nous
allons simplement passer des chaînes constantes, afin que nous puissions simplement
mettre les choses entre guillemets ici. Nous n'avons même pas besoin de créer des pointeurs.
Vous pouvez créer un pointeur et l'attribuer, puis le transmettre, mais vous
devez simplement vous assurer qu'il s'agit d'une constante.
Mais comme c'est plus facile avec moins de code, nous pouvons simplement dire test de longueur de chaîne.
Encore une fois, c'est une chaîne littérale constante.
Nous allons le tester avec un peu plus.
Nous mettrons un espace après. Ajoutons quelques sauts de ligne.
Ici, nous appellerons la longueur de la chaîne. Et en fait, appelons-le avec la chaîne vide,
assurez-vous que nous passons à zéro. Et puis
notre troisième, nous dirons la longueur de la
chaîne, nous dirons simplement Jason.
Maintenant, par ailleurs, lorsque vous les créez et que vous passez ces liens de longueur
de chaîne, ils reçoivent automatiquement le terminateur nul qui leur est ajouté.
Nous apprenons cela lorsque nous déclarons des pointeurs.
C'est un des avantages. Si vous allez créer un pointeur et que ce
sera un littéral, vous ne voulez pas spécifier la taille.
Vous voudrez faire quelque chose comme character s'il s'agit d'un tableau car un
tableau est un tableau est un pointeur. Mais si nous
ne voulons pas spécifier la taille, nous pourrions
dire le caractère p, puis à l'intérieur, nous pourrions simplement dire jason.
Rappelez-vous cette leçon où si nous ne spécifions pas la taille des tableaux de caractères,
cela ajoutera automatiquement un terminateur nul et créera la taille pour vous.
De cette façon, vous ne faites aucune erreur. Si vous mettez la taille dans le
tableau, vous n'aurez peut-être pas assez de terminateur nul.
C'est la même chose lorsque nous passons le littéral à la longueur de la chaîne,
le terminateur nul est ajouté à la fin de celui-ci.
Nous aurions donc pu créer ces
variables au départ et faire quelque chose comme ça,
puis les transmettre à chacune.
Mais je ne voulais pas perdre de temps à créer des variables. Alors je vais juste faire ça.
Maintenant, ce qui est vraiment important pour ce code, c'est la fonction.
Nous allons donc créer notre longueur de chaîne. Rappelez-vous encore une fois, il renvoie un
entier et ce sera une constante. Nous pouvons donc simplement dire une chaîne d'étoile de caractère constant.
Et vous remarquez également que le nom de la variable de
déclaration de fonction ne doit pas nécessairement correspondre. Je pourrais mettre cela sous forme de chaînes et c'est bien aussi.
Maintenant, à l'intérieur de cette fonction, nous devons créer un pointeur local car le pointeur local va
pointer vers la fin de la chaîne. Et puis une fois que nous avons l'adresse
de la fin de la chaîne, nous pouvons réduire l'adresse du début de la chaîne.
L'adresse du début de la chaîne correspond à ce qui est passé.
String va automatiquement pointer vers le premier élément du tableau ou
la première adresse du tableau.
Donc, si nous créons un pointeur local et que
nous voudrons simplement créer à nouveau une autre étoile de
caractère constant et nous dirons simplement à la dernière adresse que diriez-vous.
Et cela va être égal à l'adresse de début de la chaîne, puis
nous allons l'incrémenter à chaque fois dans notre boucle.
Alors maintenant, nous avons la dernière adresse. Encore une fois, il s'agit d'une
variable locale qui stockera l'adresse juste avant le terminateur nul.
Alors maintenant, nous pouvons écrire notre boucle while.
Et notre boucle while va se terminer lorsque nous verrons le terminateur nul.
Maintenant, nous pourrions faire cela de deux manières différentes.
Nous pourrions comparer des personnages. Nous pourrions donc dire quelque chose comme
la dernière adresse en étoile, car nous devons dé-référencer ce n'est pas
égal à la barre oblique
inverse zéro pourrait faire quelque chose comme ça, mais c'est
en quelque sorte beaucoup de code. Tout ce que nous avons vraiment à
faire, c'est de dire
tout en star à la dernière adresse. Parce que si vous
déréférencer un terminateur nul, il sera égal
à zéro et zéro est égal à faux.
Nous savons que les booléens ont un est vrai zéro est faux.
Donc, si c'est faux, ça va sauter. Donc, tout ce que vous avez
à faire est de mettre la dernière adresse en étoile dans votre condition while.
Encore une fois, cela va déréférencer le pointeur.
Et une fois qu'il pointe vers la dernière adresse, il pointe vers le terminateur nul.
Maintenant, nous devons nous assurer que nous modifions la dernière adresse, de sorte qu'elle pointe finalement vers le terminateur nul.
Ici, tout ce que nous pouvons faire est de dire plus et dernière adresse.
Ainsi, chaque itération de cette boucle while va incrémenter l'adresse jusqu'à ce
qu'elle voit un zéro.
Un zéro représente le terminateur nul.
Ainsi, le résultat final d'une fois que la
boucle while est exécutée, la dernière adresse va pointer vers l'adresse du terminateur nul.
Nous pouvons ensuite soustraire l'adresse du terminateur nul de l'adresse
qui a été passée, notre chaîne, et cela va nous donner notre longueur.
C'est donc tout ce que nous avons à faire sur la ligne suivante. Nous pouvons simplement dire renvoyer notre dernière
adresse et nous voulons
en fait réduire l'adresse, nous n'avons
donc pas besoin de dé-référencer quoi que ce soit ou d'utiliser
l'opérateur d'indirection, dernière adresse moins la chaîne. Donc, la chaîne est passée, nous
ne la modifions pas du tout.
Cela pointe vers le premier personnage. Ce serait pointer vers j.
Ce serait l'adresse ou, pour la première fois que nous appelons à la ligne huit, ce serait l'adresse de l'art.
La dernière adresse va pointer vers l'adresse de ce dernier t.
En fait, un de plus que cela, le terminateur nul. Si nous disons dernière adresse moins
l'adresse de s, cela va nous donner la longueur.
Et c'est ce que nous allons revenir.
J'espère donc que cela a du sens.
Encore une fois, à la ligne 17, nous créons une
variable locale car nous devons garder une trace de la dernière adresse,
l'adresse du terminateur nul.
Une fois cette boucle while terminée, la dernière adresse pointera après
le t, le terminateur nul.
Ensuite, nous pouvons simplement soustraire la dernière adresse de la chaîne, l'adresse de la
chaîne pointe vers s lorsqu'elle entre, nous ne modifions pas cela.
Voyons donc si cela nous rend la bonne longueur.
Lorsque nous exécutons ceci, nous devrions voir la longueur des chaînes que nous avons passées.
Nous voyons donc 17 0 et 5.
Voyons 1 2 3 4 5 6 7 8 9
10 11 12 13, vous devez compter l'espace, 14
15 16 17. C'est vrai, nous mettons
entre guillemets, ce qui est vide, donc cela devrait être zéro,
puis Jason devrait être 5 donc 17 0 et 5, c'est exact.
Donc, ce que nous avons fait ici, c'est
que nous avons utilisé l'arithmétique du pointeur pour obtenir la dernière
adresse plus l'opérateur d'incrémentation, puis pointez
notre arithmétique pour obtenir la longueur en diminuant la dernière adresse moins la chaîne.
Génial. J'essaie de démontrer la puissance
de l'arithmétique ponctuelle, la commodité de notation de celle-ci.
Comment vous pouvez facilement incrémenter, décrémenter pour
atteindre différents endroits dans un tableau de caractères
et faire sortir les caractères. Dans ce cas, nous obtenons simplement les adresses, puis
nous utilisons les adresses pour se désagréger pour obtenir la longueur.
J'espère donc que cela a été utile. Assurez-vous de bien comprendre tout ce que je viens de mentionner.
Encore une fois, le concept d'une constante, le concept de plus plus, le concept
de la condition si vous déréférencer une adresse et
qui pointe vers un terminateur nul, c'est un zéro donc il saute ensuite, puis
ce concept de moins deux adresses. Merci.