Bonjour et bienvenue à nouveau.
Dans cette conférence, je veux parler du modificateur const et de la façon
dont nous l'utilisons avec des pointeurs.
Nous avons appris des conférences précédentes constantes.
Cela signifie simplement que vous ne pouvez pas modifier la valeur d'une variable. Mais qu'est-ce que cela signifie lorsque nous l'appliquons à un pointeur?
Ainsi, lorsque nous utilisons le modificateur const dans une variable ou un
tableau, il indique au compilateur que le contenu du tableau de variables ne sera pas modifié par le programme.
L'alternative était de créer des instructions de définition par le préprocesseur, mais
const est généralement un moyen plus efficace de le faire.
Avec les pointeurs, nous devons considérer deux choses lors de l'utilisation d'un modificateur const.
Sommes-nous en train de dire que le pointeur ne peut pas être changé?
Ou disons-nous que la valeur vers laquelle pointe le pointeur ne peut pas être modifiée?
Parce que rappelez-vous qu'un pointeur contient une valeur d'adresse.
Et nous ne voudrons peut-être jamais changer cette adresse.
Ou nous pouvons ne pas vouloir changer la valeur vers laquelle pointe le point.
Dans les deux cas, nous devons être précis dans notre syntaxe.
Vous pouvez donc utiliser le mot clé const lorsque vous déclarez un pointeur pour indiquer que la valeur
pointée ne doit pas être modifiée.
La façon dont vous fournissez ceci et encore une fois
que le pointeur est une valeur en tant que valeur a une adresse.
Ce que cela indique, c'est la valeur de cette adresse.
Si vous voulez que cela ne change pas, vous feriez
quelque chose comme ça.
Vous diriez que lorsque vous déclarez le pointeur, vous placez l'astérisque dans
le modificateur de constante avant le type.
Donc, vous diriez constant quel que soit le type de votre pointeur est un pointeur astérisque.
Donc, cela est en fait déformé définissant un pointeur
vers une constante.
Nous ne pourrons pas changer 999l.
Nous déclarons donc que la valeur pointée par la pvalue est constante.
Le compilateur recherchera toutes les instructions qui tentent de modifier la valeur pointée par la pvalue.
Et s'il y a un copain qui le fait dans le programme, il va générer une erreur.
Voici donc la syntaxe. Encore une fois, ce que vous
voulez remarquer ici, c'est que const est le premier
mot, et il est avant le type. Cela veut donc dire que la valeur indiquée
ne peut pas changer.
Donc, si vous essayez de faire quelque chose comme ça sur pvalue, vous
essayez d'attribuer une valeur à ce qui pointe parce que
vous y voyez l'opérateur d'indirection. Cela signifie que nous attribuons une
valeur à ce que nous désignons. Si nous essayons de faire
cela, cela va donner une erreur car nous ne pouvons pas
changer cette valeur, ne pouvons pas changer 999l en 888l.
Alors maintenant, qu'en est-il des pointeurs vers des constantes.
Et dans la déclaration précédente, nous avons
créé le pointeur vers lequel le point pointe ne peut pas changer.
Mais nous pouvons toujours changer la valeur réelle de la variable que nous avons déclarée.
Nous serions donc toujours en mesure de modifier la valeur longue.
Nous ne pouvons pas changer la valeur p de l'étoile.
Mais la valeur longue n'est pas définie comme une constante, elle est simplement définie comme une valeur longue.
Nous pouvons donc toujours modifier le pointeur de valeur entière
car il n'y a pas de constante appliquée.
Nous avons seulement appliqué la constante au pointeur. Nous pouvons donc dire que la valeur est égale à 777l.
La valeur pointée a changé, mais vous n'avez pas utilisé le pointeur pour effectuer la modification.
Le pointeur lui-même n'est pas non plus une constante.
Le pointeur souvenir contient une adresse.
Nous n'avons pas déclaré que le pointeur était une constante. Nous pouvons donc encore changer
Nous ce que le pointeur pointe comme étant constant. cela aussi. Si nous déclarons une nouvelle variable appelée nombre, nous pouvons dire que
la valeur p est égale à l'adresse de ce nombre.
C'est parfaitement bien car nous changeons l'adresse de la valeur du pointeur.
Nous ne changeons pas la valeur de ce que le pointeur indiquait.
Comprenez donc cette distinction, soit en changeant la valeur
du pointeur, qui est
juste une adresse, soit en changeant ce vers quoi le pointeur pointe.
Si vous ne voulez pas changer ce vers
quoi le pointeur pointe, const doit être ce premier mot-clé dans la déclaration du pointeur lui-même.
Encore une fois, dans cet exemple, nous allons changer l'adresse stockée dans p-value pour pointer vers un nombre.
Nous ne pouvons toujours pas utiliser le pointeur pour modifier la valeur stockée car elle a été
déclarée car nous ne pouvons pas modifier cette valeur.
Vous pouvez modifier l'adresse stockée dans le pointeur autant que vous le souhaitez, comme nous l'avons fait.
L'utilisation du pointeur pour modifier la valeur pointée n'est pas
autorisée même après avoir modifié l'adresse stockée dans le pointeur.
Ainsi, même si nous l'avons juste
changé en nombre long, le pointeur avait toujours constant comme mot-clé.
Nous ne pouvons donc pas modifier la valeur, quel que soit le point sur lequel pointe le pointeur.
Qu'en est-il de ne pas permettre à l'adresse du pointeur de
changer, la valeur qui se trouve dans le pointeur.
Vous pouvez donc également vous assurer que l'adresse stockée dans le pointeur ne peut pas être modifiée.
Vous pouvez le faire en utilisant le mot-clé constant dans
la déclaration du pointeur de la même manière, mais c'est légèrement différent.
Au lieu d'avoir const comme premier mot-clé, vous
le placez après le type de données et après l'astérisque.
Cela signifie que le pointeur lui-même ne peut pas changer sa valeur.
Si vous le placez avant l'int, vous dites que la valeur pointée par le pointeur ne peut pas changer.
Ainsi, lorsque vous faites cela, cela garantit que le pointeur pointe toujours vers la même chose.
L'adresse ne changera jamais.
Le compilateur vérifiera que vous
n'inversez pas la tentative de modifier le pointeur ailleurs dans votre code.
Vous ne pouvez pas changer cette adresse.
Donc, si vous essayez de dire p count est égal à et item, vous obtiendrez une erreur.
Parce que cela ne peut pointer que vers l'adresse de comptage.
Tout dépend de l'endroit où vous placez le mot-clé constant si vous souhaitez le modifier.
Si vous ne souhaitez pas autoriser la modification du pointeur vers le pointeur ou
si vous n'autorisez pas la modification de l'adresse du pointeur.
La constante comme premier mot-clé ne permet pas de modifier la valeur des pointeurs pointant.
Si vous mettez la constante après le type de données dans l'étoile, cela signifie
que l'adresse du pointeur ne peut pas changer.
Donc, c'est beaucoup à prendre et c'est très déroutant, alors étudiez ce que je viens de dire.
Comprenez cette syntaxe, c'est très important et
c'est très délicat. Il peut être très facile de
faire cette erreur. Alors comprenez la différence.
Vous pouvez toujours changer la
valeur pointée par p count en utilisant p count, comme nous le pouvions dans le précédent. Parce que p count est, même si nous attribuons nous ne
pouvons pas attribuer une nouvelle adresse,
nous pouvons toujours modifier la valeur qui pointe.
Nous pouvons donc le dé-référencer et le modifier de cette façon. Nous pouvons dire que le nombre d'étoiles p est égal à 345, c'est très bien.
Fait référence à la valeur stockée dans count via le pointeur et remplace la valeur par 345.
Vous pouvez créer un pointeur de constante qui pointe vers une valeur qui est
également une constante, vous pouvez donc faire quelque chose comme ceci, constante
en étoile, élément p constant.
Et cela signifie que ce que la valeur pointe est
constant et que le pointeur lui-même est une constante.
Donc p item est un pointeur constant vers une constante donc tout est fixe.
Vous ne pouvez pas modifier l'adresse stockée dans l'élément p et vous ne pouvez pas
utiliser l'élément p pour modifier ce vers quoi il pointe.
Cependant, vous pouvez toujours modifier l'élément.
L'élément n'est pas une constante, vous pouvez donc changer d'élément.
Vous pouvez modifier la valeur directement.
Si vous voulez vous assurer que rien n'a été changé, vous
devez également créer la variable item int en tant que constante.
Et puis cela dirait que cela ne changera jamais.
Mais rappelez-vous ici la différence entre
les pointeurs constants et les valeurs constantes vers lesquelles le pointeur pointe.
Vous pouvez utiliser les deux. Vous pouvez utiliser l'un ou l'autre.
Si vous voulez vous assurer
que tout est constant, assurez-vous que ce que vous pointez vers cette variable est également constant. Merci.