2012-08-07 13 views
6

Si creo una matriz global de valores const, p.Puntero de matriz de Const a los valores de const

const int SOME_LIST[SOME_LIST_SIZE] = {2, 3, 5, 7, 11}; 

¿es posible modificar SOME_LIST de alguna forma?

¿Cómo puedo escribir esto de manera que SOME_LIST apunta a una ubicación de memoria const, y es un puntero const en sí mismo (es decir, no se puede apuntar a otro lugar)?

+3

'SOME_LIST' no se puede modificar de todos modos –

+3

' SOME_LIST' es [una matriz, no un puntero] (http: //stackoverflow.com/questions/4810664/), por lo que solo hay un nivel de constness del que preocuparse. – fredoverflow

Respuesta

8

La forma en que la tiene es correcta.

Además, no necesita proporcionar SOME_LIST_SIZE; C++ lo resolverá automáticamente desde el inicializador.

+0

Solo para confirmar, si traté de apuntarlo a otra parte o configurarlo, ¿se lanzaría un error de compilación? – Darthfett

+1

@Darthfett: Sí, lo haría. Alguien particularmente malicioso podría usar 'const_cast' en él, pero como no-puntero, estoy bastante seguro de que está entrando en un territorio de comportamiento indefinido. – KRyan

+3

Por supuesto: una matriz no puede ser reubicada, y 'memset' se quejaría de que le está dando un puntero' const'. Obviamente, se puede omitir esta última protección con un 'const_cast', pero luego se ingresa en UB-land (puede provocar un bloqueo en el tiempo de ejecución). –

11

Hay 3 ejemplos principales de punteros que implican la palabra clave "const". (Consulte esto link)

En primer lugar: declarar un puntero a una variable constante. El puntero puede moverse y cambiar a qué apunta, pero la variable no se puede modificar.

const int* p_int; 

En segundo lugar: declarar un puntero "inamovible" a una variable. El puntero está 'fijo' pero los datos pueden ser modificados. Este puntero debe declararse y asignarse, de lo contrario, puede apuntar a NULL y arreglarse allí.

int my_int = 100; 
int* const constant_p_int = &my_int; 

En tercer lugar: declarar un puntero inmóvil a datos constantes.

const int my_constant_int = 100; (OR "int const my_constant_int = 100;") 
const int* const constant_p_int = &my_constant_int; 

También podría utilizar esto.

int const * const constant_p_int = &my_constant_int; 

Otra buena referencia ver here. Espero que esto ayude, aunque al escribir esto me doy cuenta de que su pregunta ya ha sido respondida ...

+1

Estaba familiarizado con el uso de punteros const, simplemente eran arreglos de los que no estaba seguro. Todavía hay muy buenas cosas para saber. :) – Darthfett

+0

Sí, hace poco estaba tomando mi cabeza, así que pensé que podría compartir (: – user3728501

Cuestiones relacionadas