const int*
int const* es un puntero a un entero constante Esto significa que la variable que se declara es un puntero que apunta a un entero constante. Efectivamente, esto implica que el puntero apunta a un valor que no debe cambiarse. El calificador constante no afecta al puntero en este escenario, por lo que se permite que el puntero apunte a alguna otra dirección. La primera palabra clave const puede ir a ambos lados del tipo de datos, por lo que int const* es equivalente a const int* .
C
#include <stdio.h> int main(){ const int q = 5; int const* p = &q; //Compilation error *p = 7; const int q2 = 7; //Valid p = &q2; return 0; }
int * constante
int *const es un puntero constante a un número entero. Esto significa que la variable que se declara es un puntero constante que apunta a un número entero. Efectivamente, esto implica que el puntero no debe apuntar a ninguna otra dirección. El calificador constante no afecta el valor de entero en este escenario, por lo que el valor que se almacena en la dirección puede cambiar.
C
#include <stdio.h> int main(){ int q = 5; int *const p = &q; //Valid *p = 7; const int q2 = 7; //Compilation error p = &q2; return 0; }
const int* const
const int* const es un puntero constante a un entero constante Esto significa que la variable que se declara es un puntero constante que apunta a un entero constante. Efectivamente, esto implica que un puntero constante apunta a un valor constante. Por lo tanto, ni el puntero debe apuntar a una nueva dirección ni el valor al que se apunta debe cambiarse. La primera palabra clave const puede ir a ambos lados del tipo de datos, por lo que const int* const es equivalente a int const* const .
C
#include <stdio.h> int main(){ const int q = 5; //Valid const int* const p = &q; //Compilation error *p = 7; const int q2 = 7; //Compilation error p = &q2; return 0; }
Mapa de memoria
Una forma de recordar la sintaxis (según Bjarne Stroustrup) es la regla de la espiral: la regla dice, comience desde el nombre de la variable y muévase en el sentido de las agujas del reloj hasta el siguiente puntero o tipo. Repita hasta que termine la expresión. La regla también puede verse como una decodificación de la sintaxis de derecha a izquierda. Por eso,
- int const* es un puntero a const int
- int *const es const puntero a int
- int const* const es const puntero a const int
Usando esta regla, incluso las declaraciones complejas se pueden decodificar como,
- int ** const es un puntero constante a un puntero a un int .
- int * const * es un puntero a const puntero a un int .
- int const ** es un puntero a un puntero a una const int .
- int * const * const es un puntero const a un puntero const a un int .
Publicación traducida automáticamente
Artículo escrito por palaknarula y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA