vectores sirven que punteros para operaciones matrices los estructura ejemplo dev datos con aritmetica apuntadores c pointers const

sirven - punteros y matrices en c



Uso constante con punteros en C (6)

Voy a revisar C y tengo una pregunta sobre el uso de const con punteros. Entiendo el siguiente código:

const char *someArray

Esto es definir un puntero que apunta a tipos de caracteres y el modificador const significa que los valores almacenados en someArray no se pueden cambiar. Sin embargo, ¿qué significa lo siguiente?

char * const array

¿Es esta una forma alternativa de especificar un parámetro que es un puntero a un conjunto llamado "array" que es const y no se puede modificar?

Por último, ¿qué significa esta combinación:

const char * const s2

Para referencia, se toman del libro de programación de Deitel C en el Capítulo 7 y todos estos se utilizan como parámetros pasados ​​a las funciones.


Repitiendo lo que otros usuarios escribieron, pero quiero proporcionar contexto.

Toma estas dos definiciones:

void f1(char *ptr) { /* f1 can change the contents of the array named ptr; * and it can change what ptr points to */ } void f2(char * const ptr) { /* f2 can change the contents of the array named ptr; * but it cannot change what ptr points to */ }

Hacer que el puntero const , como en el ejemplo f2, es absolutamente casi inútil. Cada parámetro pasado a una función se pasa por valor. Si la función cambia ese valor, solo cambia su copia local y no tiene efecto en el código de llamada.

/* ... calling code ... */ f1(buf); f2(buf);

En cualquier caso, buf no cambia después de la llamada a la función.

Considera la función strcpy ()

char *strcpy(char *dest, const char *src);

Una posible implementación es

char *strcpy(char *dest, const char *src) { char *bk = dest; while (*src != ''/0'') { *dest++ = *src++; } *dest = *src; return bk; }

Esta implementación cambia tanto dest como src dentro de la función solamente. Hacer cualquiera de los punteros (o ambos) const no ganaría nada para la función strcpy () o para el código de llamada.


Usted debe probar cdecl :

~ $ cdecl Type `help'' or `?'' for help cdecl> explain const char *someArray declare someArray as pointer to const char cdecl> explain char * const someArray declare someArray as const pointer to char cdecl> explain const char * const s2 declare s2 as const pointer to const char cdecl>



const char* es, como dijiste, un puntero a un char, donde no puedes cambiar el valor del char (al menos no a través del puntero (sin lanzar la constancia)).

char* const es un puntero a un char, donde puede cambiar el char, pero no puede hacer que el puntero apunte a un char diferente.

const char* const es un puntero constante a un char constante, es decir, no puede cambiar dónde apunta el puntero ni el valor del pointee.


//pointer to a const void f1() { int i = 100; const int* pi = &i; //*pi = 200; <- won''t compile pi++; } //const pointer void f2() { int i = 100; int* const pi = &i; *pi = 200; //pi++; <- won''t compile } //const pointer to a const void f3() { int i = 100; const int* const pi = &i; //*pi = 200; <- won''t compile //pi++; <- won''t compile

}


char * const array;

Significa que el puntero es constante. También,

const * const char array;

Significa un puntero constante a la memoria constante.