Diferencia entre const int*, const int * const e int const *

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. Spiral ruleLa regla también puede verse como una decodificación de la sintaxis de derecha a izquierda. const pointer to const intPor 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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *