¿Cuál es el papel de la constante?
1. La diferencia entre const int e int
1. Valor de retorno
const int amp;
Y int devuelve una copia de este valor.
int es una copia construida y const int amp; es la referencia devuelta. La construcción de copias lleva más tiempo y, al mismo tiempo, se utiliza un destructor. Debido a que se crea una copia, puede modificar fácilmente el contenido de la copia.
2. Obtener punteros
Una vez definido el tipo int constante, no se puede modificar. El tipo int se puede modificar en cualquier momento.
En términos de obtener punteros, const es un poco complicado, pero no deben involucrarse operaciones regulares y razonables, porque const int se usa para guardar algunas constantes globales, y estas constantes se pueden cambiar durante la compilación, no es posible. cambiarse durante el tiempo de ejecución.
Esto suena como una macro, pero en realidad se usa para reemplazar macros: #define PI 3.14 const float Pi = 3.14 Si usa PI (macro) 100 veces en su código, su código tendrá 100 constantes de; 3.14 se almacenará en él.
Dado que el código de máquina que usa constantes para las operaciones suele ser más largo que el que usa variables, si cambia a 100 veces Pi (const float), no es necesario que aparezca 100 veces en el código de máquina después de que se ejecuta el programa. Compilado la constante 3.14, solo consulte la constante que almacena 3.14 cuando sea necesario.
Especialmente en operaciones complejas, la constante 3.14 (en realidad una variable que no se puede modificar) siempre se cargará en el registro, lo que traerá algunas mejoras de rendimiento.
3. Contenido
constint* p; //p es variable, el contenido señalado por p es inmutable, int const* p; //p es variable y el contenido señalado por p es inmutable. ?int* const p; //p es inmutable y el contenido señalado por p es mutable?const int* const p; //Tanto p como el contenido señalado por p son mutables.
2. El papel de las constantes:
1. Las constantes constantes se pueden definir y son inmutables. ?
Por ejemplo: const int Max=100; Max generará un error ?
2. procesa el contenido y elimina algunos peligros ocultos.
Por ejemplo: void f(const int i) { .........} El compilador sabrá que i es una constante y no se permite modificarla;?
3, puede evitar la aparición de números ambiguos y también puede ajustar y modificar parámetros fácilmente. Al igual que la definición de macro, se puede hacer siempre que no cambie, ¡y cambiará si cambia!
Como en 1, si quieres modificar el contenido de Max, solo necesitas modificarlo a: const int Max=tu quieres; ¡Eso es!
4. Puede proteger los elementos modificados, evitar modificaciones accidentales y mejorar la solidez del programa. Aún en el ejemplo anterior, si se modifica i en el cuerpo de la función, el compilador informará un error;
Por ejemplo: void f(const int i) { i=10; ?
5. Puede ahorrar espacio y evitar la asignación de memoria innecesaria.
Información ampliada
Cuando const modifica un tipo de puntero, el valor del puntero no se puede cambiar, es decir, no puede apuntar a otras direcciones, sino al valor de la dirección a la que apunta. se puede modificar a través del puntero.
Cuando el tipo señalado por el puntero se modifica con const, el puntero apunta a otra dirección, pero el valor dentro del puntero no se puede modificar a través del puntero.
1) Comencemos con const int i.
Lo modificado con const se llama constante simbólica. Es decir, no me pueden reasignar a otro lugar. Nota: const int i e int const i son equivalentes e iguales, es decir, la posición de const e int no importa.
2) const int *p
Mira el ejemplo:
int i1=30
int i2=40; /p >
const int *p=amp;i1;
p=amp;i2; ?//Aquí, p se puede reasignar a una nueva dirección de memoria en cualquier momento.
i2=80; ?//¿Se puede utilizar *p=80 en su lugar? La respuesta es no
printf("d", *p);//Salida 80
Análisis: El valor de p se puede modificar, es decir, se puede redirigir. a otra dirección. Pero el valor de i2 no se puede modificar mediante *p.
En primer lugar, const modifica todo el *p (tenga en cuenta que es *p, no p), por lo que *p es una constante y no se le puede asignar un valor. Aunque i2 apuntado por p es una variable en lugar de una constante;
En segundo lugar, p no se modifica con const, por lo que p es una variable de puntero. Se puede asignar para que apunte a otra dirección de memoria.
Referencia: Enciclopedia Baidu——const