Hola y bienvenido de nuevo.
En esta conferencia, quiero hablar sobre el modificador const y
cómo lo usamos con punteros.
Hemos aprendido sobre conferencias previas constantes.
Simplemente significa que no puede cambiar el valor de una variable. Pero, ¿qué significa cuando lo aplicamos a un puntero?
Entonces, cuando usamos el modificador const en una variable o una
matriz, le dice al compilador que el programa no cambiará el contenido de la matriz de variables.
La alternativa era crear sentencias definidas por el preprocesador, pero const
suele ser una forma más eficiente y mejor de hacerlo.
Con los punteros, tenemos que considerar dos cosas cuando usamos un modificador const.
¿De verdad estamos diciendo que el puntero no se puede cambiar?
¿O estamos diciendo que el valor al que apunta el puntero no se puede cambiar?
Porque recuerda que un puntero contiene el valor de una dirección.
Y es posible que no queramos cambiar esa dirección nunca.
O puede que no queramos cambiar el valor al que apunta el punto.
En cualquier caso, tenemos que ser específicos en nuestra sintaxis.
Por lo tanto, puede usar la palabra clave const cuando declara un puntero para indicar que el valor
al que apunta no debe cambiarse.
La forma en que proporciona esto y otra vez para
que el puntero sea un valor, ya que un valor tiene una dirección.
Lo que apunta es el valor de esa dirección.
Si quieres que eso no cambie, harías
algo como esto.
Diría que cuando declara el puntero, coloca el asterisco en
el modificador constante antes del tipo.
Entonces diría constante cualquiera que sea el tipo de su puntero es puntero de asterisco.
Entonces, esto en realidad se deforma al definir un puntero
a una constante.
No vamos a poder cambiar 999l.
Entonces declaramos que el valor apuntado por el pvalue es constante.
El compilador comprobará si hay declaraciones que intenten modificar el valor apuntado por pvalue.
Y si hay algún amigo que lo haga en el programa, arrojará un error.
Entonces esta es la sintaxis. Nuevamente, lo que desea notar
aquí es que la constante es la
primera palabra y está antes del tipo. Eso significa que el valor al que apunta
no puede cambiar.
Entonces, si intenta hacer algo como esto en pvalue, intente asignar
un valor a lo que apunta porque ve el
operador de indirección allí. Eso significa que estamos asignando un
valor a lo que apuntamos. Si intentamos hacer
eso, dará un error porque no podemos cambiar
ese valor, no podemos cambiar 999l a 888l.
Entonces, ¿qué pasa con los punteros a las constantes?
Y en la declaración anterior, creamos
el puntero al que apunta el punto que no puede cambiar.
Pero aún podemos cambiar el valor real de la variable que declaramos.
De modo que aún podríamos cambiar el valor largo.
No podemos cambiar el valor p de la estrella.
Pero el valor largo no se define como una constante, solo se define como valor largo.
Por lo tanto, aún podemos modificar el puntero de valor
entero porque no tenía una constante aplicada.
Solo aplicamos constante al puntero. Entonces podemos decir que el valor es igual a 777l.
El valor al que apunta ha cambiado, pero no usó el puntero para realizar el cambio.
El puntero en sí tampoco es una constante.
El puntero recuerda contiene una dirección.
No declaramos que el puntero sea una constante. Así que todavía podemos cambiar
Tenemos a lo que apunta el puntero como constante. eso también. Si declaramos una nueva variable llamada número, podemos decir que el
valor p es igual a la dirección de ese número.
Eso está perfectamente bien porque estamos cambiando la dirección del valor del puntero.
No cambiaremos el valor de lo que apuntaba el puntero.
Entonces, comprenda esta distinción, ya sea cambiando el
valor del puntero, que
es solo una dirección, o cambiando a qué apunta el puntero.
Si no desea cambiar a qué apunta
el puntero, const debe ser la primera palabra clave en la declaración del puntero.
De nuevo, en este ejemplo, vamos a cambiar la dirección almacenada en el valor p para que apunte a un número.
Todavía no podemos usar el puntero para cambiar el valor que está almacenado porque fue
declarado ya que no podemos cambiar ese valor.
Puede cambiar la dirección almacenada en el puntero tanto como desee, tal como lo hicimos nosotros.
No se permite usar el puntero para cambiar el valor al que
apunta, incluso después de haber cambiado la dirección almacenada en el puntero.
Entonces, aunque lo cambiamos a un
número largo, el puntero aún tenía constante como palabra clave.
Por lo tanto, no podemos cambiar el valor sin importar a qué apunte el puntero.
¿Qué hay de no permitir que cambie la dirección del
puntero, el valor que está en el puntero?
Por lo tanto, es posible que desee asegurarse de que la dirección almacenada en el puntero no se pueda cambiar.
Puede hacer esto usando la palabra clave constante en la
declaración del puntero de la misma manera, pero es ligeramente diferente.
En lugar de tener const como la primera palabra
clave, póngala después del tipo de datos y después del asterisco.
Esto quiere decir que el puntero en sí mismo no puede cambiar su valor.
Si lo pones antes del int, estás diciendo que el valor al que apunta el puntero no puede cambiar.
Entonces, cuando hace esto, se asegura de que el puntero siempre apunte a lo mismo.
La dirección nunca cambiará.
El compilador verificará que no
invierta el intento de cambiar el puntero en otra parte de su código.
No puedes cambiar esta dirección.
Entonces, si intentara decir que p cuenta igual y elemento, obtendría un error.
Porque eso solo puede apuntar a la dirección de conteo.
Se trata de dónde coloca la palabra clave constante si desea cambiar.
Si no desea permitir que cambie el puntero al puntero o si
no permite que cambie la dirección del puntero.
Constante como primera palabra clave no permite cambiar el valor de los punteros que apuntan.
Si coloca la constante después del tipo de datos en la estrella, eso significa
que la dirección del puntero no puede cambiar.
Así que eso es mucho para tomar y eso es muy confuso, así que estudie lo que acabo de decir.
Comprende esa sintaxis, es muy importante
y muy complicada. Es muy fácil cometer
ese error. Entonces, comprenda la diferencia.
Aún puede cambiar el valor
que apunta p count a usar p count, al igual que pudimos en el anterior. Debido a que p count es, aunque asignamos no
podemos asignar una nueva dirección, aún
podemos cambiar el valor al que apunta.
Entonces podemos quitarle la referencia y cambiarlo de esa manera. Podemos decir que el número de estrellas p es igual a 345, eso está bien.
Hace referencia al valor almacenado en el recuento a través del puntero y cambia el valor a 345.
Puede crear un puntero constante que apunte a un valor que también sea
una constante, por lo que podría hacer algo como esto, constante en
estrella, elemento p constante.
Y eso significa que a lo que apunta el valor
es constante y el puntero en sí es una constante.
Entonces, p item es un puntero constante a una constante, por lo que todo está fijo.
No puede cambiar la dirección almacenada en el elemento p y no puede
utilizar el elemento p para modificar lo que apunta.
Sin embargo, aún puede cambiar el elemento.
El artículo no es una constante, por lo que puede cambiarlo.
Puede cambiar el valor directamente.
Si desea asegurarse de que no se haya cambiado nada, también
tendrá que crear la variable int item como una constante.
Y luego eso diría que nunca va a cambiar.
Pero recuerde la diferencia aquí entre
punteros constantes y valores constantes a los que apunta el puntero.
Puedes usar ambos. Puedes usar uno u otro.
Si desea asegurarse de que
todo sea constante, asegúrese de que lo que está apuntando a esa variable esa variable también sea constante. Gracias.