Red de conocimiento informático - Conocimiento sistemático - La pregunta en lenguaje C de nivel 2 de computadora de la provincia de Zhejiang solicita un análisis detallado del proceso, no se requiere respuesta

La pregunta en lenguaje C de nivel 2 de computadora de la provincia de Zhejiang solicita un análisis detallado del proceso, no se requiere respuesta

La respuesta que analicé es: CDDC.

Lo primero que hay que entender es que la matriz de punteros de caracteres *s[4] apunta a la primera dirección de estas cuatro cadenas.

Por ejemplo, S[0] almacena la primera. dirección de la cadena. La dirección del primer carácter 't' de una cadena "árbol" debe entenderse que está en la memoria

Se almacenan así:

S[0 ] apunta a 't' La primera dirección del carácter, es decir, S [0] almacena la dirección de memoria del carácter 't'. Pero no olvides que el terminador de cadena '\0' se agrega automáticamente al final de la cadena. Si no comprende esta parte, también puede leer el contenido de esta parte en un libro en lenguaje C.

Programa de análisis:

(1)?i?=?0;?p2=S[0];?p1?=?p2?0;?

Aquí se explica que los punteros de caracteres p1 y p2 apuntan al carácter 't', *p1=*p2='t'.

Ejecute el ciclo while, se cumple la condición del ciclo, *p2=*p1, aquí es para asignar el valor de *p1 a *p2, porque todos

apuntan al carácter 't', por lo que no cambia su valor. Entonces p1, p2 significa que p1 y p2 apuntan al siguiente carácter 'r'

Aún sin cambios. Por analogía, cuando p1 y p2 apuntan al carácter '\0', el ciclo while finaliza y luego se ejecuta

*p2='\0'. Sin embargo, *p2 es originalmente igual a '\. 0', por lo que permanece sin cambios.

Es decir, el bucle i?=?0for termina una vez y la cadena "árbol" no ha cambiado.

(2)?i?=?1;p2=S[1];?p1?=?p2? ?1;?

Ejecutar el bucle while, el primer bucle Obviamente *p2?=?*p1, porque *p1='l', entonces *p2='l', es decir, 'f' en la memoria cambia a 'l'. Cuando se ejecutan p1 y p2, los cambios en la memoria son los siguientes:

Similar a una asignación de intercambio, el puntero se mueve al siguiente bit y el ciclo while finaliza.

Hay otro punto muy importante que debe recordarse cuando el ciclo while finaliza pero *p2='\0'

, se asignará el valor señalado por p2. \0'. p1?=?p2? ?i; Preste atención al movimiento del puntero p1

A qué carácter apunta p1.

En lenguaje C, si hay '\0' en la cadena, al generar caracteres, solo generará los caracteres antes de '\0'.

Por ejemplo: la cadena "ass\0s\0", el resultado al generar la cadena es "ass".

(3)i?=?2?, 3 no se analizará aquí, la misma idea de análisis anterior.