C detallada palabra clave const idioma

palabra clave const en lenguaje C.

const no se utiliza mucho en la programación real, constante const es el acrónimo que significa "constante"! Se trata de una palabra clave las variables de sólo lectura definidos, o palabra clave const es a menudo variable de definición.

Dicha definición const es variable, pero la constante equivalente, sino que se define por una constante, pero la propiedad hay variables, por lo que llama la variable constante . las variables constantes Const definidos por el método es muy simple, que puede ser precedida const en la definición normal de las variables, tales como:

const int a = 10;

const tipo int variable y se pueden intercambiar, ambos son equivalentes, es decir, equivalente a la declaración:

int const a = 10;

Así que después de la modificación con const y ex diferencia Lo que no modificada hace? No son todos iguales a 10 no?

El valor de la variable se define con la const ** no se les permite el cambio, lo que no permite que sea reasignado, incluso si no se puede asignar el mismo valor. ** define de modo que sea las variables de sólo lectura. Esto significa que se debe dar un valor inicial en el momento de la definición.

Si no inicializado cuando se define, sabemos que para las variables locales no se inicializan, el programa se ejecutará automáticamente cuando la tienda en un pequeño número negativo. Por lo que darle vuelta dada palabra inicial es "cambia su valor", y que es se produce un error de sintaxis.

Modificado por variables const, si se trata de una variable global o una variable local, el ciclo de vida está en marcha todo el proceso . ciclo de vida variables globales para todo el proceso de ejecución de esto por sentado. El uso de variables locales const modificados tienen una característica estática, todo el proceso de su ciclo de vida se está ejecutando. Sabemos que las variables globales son estáticos, es estática todo el ciclo de vida del programa se está ejecutando. Pero con const modificado variables locales sólo tienen características estáticas, y no se convirtió en una variable estática.

Sabemos que en la pila, las variables estáticas se almacenan en el área de almacenamiento estático, y después de const variables locales para almacenar modificadas sobre las variables se almacenan en la memoria en el "segmento de datos de sólo lectura" en. El segmento de almacenamiento de datos de sólo lectura asciende variables y constantes no modificables de sólo lectura.

No ser una longitud variable de la matriz : const aunque se define la variable de sólo lectura, la definición es equivalente a una constante. las variables, sino también las variables de sólo lectura, variables const define como la longitud de la matriz todavía no puede. C ++ se extiende significado const de las variables utilizadas en C ++ se puede definir como la longitud const de la matriz.

const y punteros

variable de puntero const y también se pueden usar juntos, limitando de este modo la variable puntero sí mismo, puede limitar el puntero de datos. Const y punteros utilizarán con varios diferente orden, de la siguiente manera:

int a = 1;
int b = 2;
// 情况一
const int *p1 =  &a;
int const *p2 = &a;
// 指针所指向的数据是只读的,也就是 p1、p2 本身的值可以修改(指向不同的数据),但它们指向的数据不能被修改。
// 即: 
// *p1 = 3; 报错,不能修改指向的数据
// p1 = &b; 有效,可以修改变量的指向

// 情况二
int * const p3 = &a; 
// 指针是只读的,也就是 p3 本身的值不能被修改;
// 即:
// p3 = &b; 报错,不能修改指向的地址
// *p3 = 3; 有效,可以修改指向地址的值

// 情况三
// 指针本身和它指向的数据都是只读的
const int * const p4;
int const * const p5;

nombres de las variables const del pasado se utiliza para modificar la variable puntero, el nombre de la variable lejos de que se utiliza para modificar el puntero de datos, si tienen cerca y de lejos, a continuación, modificar variables de enlace de datos y, al mismo tiempo que apunta.

const y Parámetros de la función

const utilizado comúnmente en el parámetro de la función, si el parámetro es un puntero, con el fin de evitar la modificación de los datos dentro de la función de puntero puede ser utilizada para limitar const. Por ejemplo, la biblioteca estándar del lenguaje función c

size_t strlen ( const char * str );
int strcmp ( const char * str1, const char * str2 );
char * strcat ( char * destination, const char * source );
char * strcpy ( char * destination, const char * source );

Limitar el uso de los parámetros de función const, no sólo puede evitar que los datos sean modificados, pueden también dar consejos cuando se invoca.

no constante y const moldes

const char *Y char *son de diferentes tipos, no se puede ser const char *del tipo de datos asignados a char *una variable de tipo. Pero lo contrario es posible, el compilador permite la char *asignación de tipos de datos de los const char *tipos de variables.

char *Los puntos de datos que han de leer y escribir, y const char *los datos de sólo lectura señalado privilegios de acceso para reducir los datos que no causa ningún problema, pero hay un riesgo de que los datos de elevación de privilegios puede ocurrir.

La operación no funciona así:

#include <stdio.h>

int main(){
    const char *str1 = "a";
    char *str2 = str1; // 报错,不能给const变量增加权限
    return 0;
}

const 和 definir

Mucha gente va a confundir y definir la diferencia a la hora de aprender const. A partir de la función que realmente le gusta, pero tienen significativamente diferentes:

  1. definir instrucciones pre-compilados, se define variable común const . definen las macros se definen en la fase previa al despliegue, y de sólo lectura definición const variable se utiliza en la elaboración de la fase de explotación.
  2. ** las variables const se definen, y definen constantes está definido. ** definir macros se definen en el compilador no existe, que no ocupa memoria, porque no es una variable, el sistema asignará a la variable de memoria. naturaleza variable Const pero a menudo sigue siendo una variable definida, las variables que tienen propiedades básicas, hay tipos de células de memoria ocupan.
  3. ** variable de const se define, y la definición macro es una constante, por lo que la const objeto define los tipos de datos, y el objeto es no macro tipo de datos de definición. ** por lo que el compilador puede escribir los controles de seguridad para el primero, mientras que el último sólo es mecánicamente sustitución de caracteres, sin ningún tipo de control de seguridad. Esto hace que sea fácil equivocarse, es decir, las "cuestiones marginales" o "cuestión paréntesis."

Y la diferencia entre C ++

En C ++, la const no tiene que crear un espacio de memoria, y en (c), una constante siempre se necesita un espacio de memoria.

Después de c ++ definida por una const constante, y escribe la tabla de símbolos (Tabla de símbolos) , por lo que es una constante de tiempo de compilación, no asignar el almacenamiento, ni la memoria que almacena la operación de lectura, de manera que la eficiencia es muy alta.

int main(){
    const int a  = 2;
    int* p = (int*)(&a);
    *p = 30; // 直接修改const常量对应的内存空间中的值
    cout<<&a<<endl; 
    cout<<p<<endl;  
    cout<<a<<endl;
    cout<<*p<<endl;
}

El resultado:

0x7fffc7920804
0x7fffc7920804
2
30

Al modificar el valor del puntero del espacio de memoria que corresponde a la const constante, esta modificación no afecta al valor de la misma constante, ya que el compilador no será leído al espacio de memoria. Esto es c ++ plegado constante (plegable Constant) , viniendo constantes const en la tabla de símbolos, y no para asignar la memoria. Compilador de optimización directamente reemplazado.

A menos que necesite usar constantes const de espacio de almacenamiento, el compilador se verá obligado a destinar un espacio, pero aún después de valor constante const de la tabla de símbolos lee, por lo que no afectará el valor de la constante const.

En el lenguaje C

int main()
{
    const int a  = 2;
    int* p = (int*)(&a);
    *p = 30;
    printf("%x\n",&a);
    printf("%x\n",p);
    printf("%i\n",a);
    printf("%i\n",*p);
    return 0;
}

Los resultados operativos

18b1c0e4
18b1c0e4
30
30

c Referencia del lenguaje puede ser modificado por modificado const puntero del valor de la variable.

C y C ++ const similitudes y diferencias entre el resumen

  • c const lenguaje global será almacenada en los segmentos de datos de sólo lectura . Cuando la const c ++ mundial declaración externo tomar la dirección de la variable en la dirección de memoria asigna compilador segmento de datos de sólo lectura, almacenamiento variable. segmento de datos de sólo lectura Ambos fueron protegidos no se puede modificar.
  • lenguaje C en el área de pila, pero no puede ser modificado directamente por los valores de las variables locales memoria de sólo lectura variables const const, pero pueden saltarse el compilador de comprobación modificada indirectamente por un valor de puntero const. Y C ++ es:
    • Para el tipo de datos subyacente, lo puso en la tabla de símbolos, que asigna la memoria cuando se toma su dirección, asigna memoria.
    • Para los tipos de datos básicos, si una variable se inicializa las variables const se han inicializado, se asignará memoria.
    • Dado que para un determinado tipo de datos, tales como objetos de clase, a continuación, asignar memoria.
  • c, conexión externo predeterminado const, C ++ const por defecto a las conexiones internas . Cuando el lenguaje C dos archivos tienen const int ael tiempo, el compilador informará de un error redefinido. En C ++, usted no, porque C ++ const en su defecto está conectado internamente.

material de referencia

const palabra clave y su función (uso), lenguaje C const explicar
el papel del lenguaje C y el análisis const
C y C ++ const de algunas diferencias sobre

Publicado cinco artículos originales · ganado elogios 0 · Vistas 59

Supongo que te gusta

Origin blog.csdn.net/taokexia/article/details/105337650
Recomendado
Clasificación