En la primera nota: ¡es un concepto nuevo para mí! Estudié punteros y asignaciones de memoria dinámica y ejecuté algún programa recientemente y me preguntaba en la declaración char * p = "Computers" la cadena se almacena en alguna ubicación de memoria y la dirección base, es decir, la dirección inicial de la cadena se almacena en p, ahora Noté que puedo realizar cualquier operación deseada en la cadena, ahora mi duda es por qué usamos una declaración especial como malloc y calloc cuando simplemente podemos declarar una cadena como esta con la longitud deseada.
Si mi comprensión del concepto es incorrecta, explique.
Gracias por adelantado.
En esta declaración
char*p="Computers";
el puntero p
se inicializa con la dirección del primer carácter del literal de cadena "Computers"
.
Los literales de cadena tienen la duración del almacenamiento estático. No puede cambiar un literal de cadena como por ejemplo
p[0] = 'c';
Cualquier intento de cambiar un literal de cadena da como resultado un comportamiento indefinido.
La función malloc
se utiliza para asignar memoria de forma dinámica. Por ejemplo, si desea crear dinámicamente una matriz de caracteres que contendrá la cadena "Computers"
, debe escribir
char *p = malloc( 10 ); // the same as `malloc( 10 * sizeof( char ) )`
strcpy( p, "Computers" );
Puede cambiar la matriz de caracteres creada. Por ejemplo
p[0] = 'c';
Después de que la matriz ya no sea necesaria, debe liberar la memoria asignada como
free( p );
De lo contrario, el programa puede tener una pérdida de memoria.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras