Varios métodos de definición y explicaciones de cadenas en lenguaje C.
1. Constante de cadena
Es decir, cualquier carácter entre un par de corchetes dobles. El carácter de comilla doble y el carácter de fin \0 proporcionados automáticamente por el compilador se utilizan como cadenas que se almacenan en la memoria. Tales como: printf ("% s", "hello"); // "Hello"
Si no hay espacios en medio del texto de la cadena o hay caracteres de espacio en los espacios, ANSI C los concatenará. Ejemplo:
char saludo [50] = "Hola" y "¿Cómo estás?";
Equivalente a:
char saludo [50] = "Hola , ¿cómo estás?";
Las constantes de cadena pertenecen a la clase de almacenamiento estático. El almacenamiento estático significa que si se usa una constante de cadena en una función, incluso si la función se llama varias veces, la cadena solo se almacena una vez durante toda la ejecución del programa. Todo el contenido citado actúa como un puntero a la ubicación donde se almacena la cadena. Esto es similar a usar el nombre de la matriz como puntero a la ubicación de almacenamiento de la matriz.
2. Matriz de cadenas y su inicialización
Ejemplo de inicialización:
char m[40]="Hola, mundo" //Definir cadena Cuando se usa un matriz, se debe especificar el tamaño de la matriz (una constante entera). Al especificar el tamaño, asegúrese de que el tamaño de la matriz sea mayor que el valor predeterminado porque el compilador agregará automáticamente "\0".
//Los elementos adicionales se inicializarán en "\0"
char m = {'h', 'e', 'l', '\0'}; //Tenga en cuenta el carácter nulo al final del símbolo. Sin él, simplemente obtendrías una serie de caracteres en lugar de una cadena.
3. Utilice punteros de caracteres para definir cadenas.
char *m = "Hola, mundo"; //Agrega automáticamente "\0"
Nota: en este momento, el puntero de cadena m apunta a una constante de cadena, por lo que * no se puede utilizar (m+1)='o' modifica esta constante porque esta constante de cadena no se puede modificar si se coloca en el área de constantes.
4. Matrices y punteros
¿Cuál es la diferencia entre forma de matriz y forma de puntero?
Formato de matriz: char m【40】="hola, mundo"
Formato de puntero: char * m = "hola, mundo"; Formulario:
El compilador tratará a array& como la dirección del primer elemento de array& Sinónimos de m[0], donde m es la constante de dirección. Puede usar m+1 para identificar el siguiente elemento en la matriz, pero no puede usar ++m. El operador de incremento solo se puede usar antes de variables, no antes de constantes. A
m[40] se le asigna una matriz que contiene 40 elementos en la memoria de la computadora (cada elemento corresponde a un carácter y el otro elemento corresponde al carácter nulo final "\0"). Cada elemento se inicializa con el carácter correspondiente.
Normalmente, la cadena referenciada se almacena en el segmento de datos del archivo ejecutable; cuando el programa se carga en la memoria, la cadena también se carga en la memoria y la cadena referenciada se copia en la matriz.
Forma de puntero:
La forma de puntero (*m) también reserva espacio para cadenas en el área de almacenamiento estático. Además, una vez que el programa comienza a ejecutarse, se debe reservar otra ubicación de almacenamiento para la variable de puntero m para que la dirección de la cadena pueda almacenarse en esa variable de puntero.
m apunta al primer carácter de la cadena y ++m se puede utilizar para señalar el segundo carácter. El puntero m es una variable.