Una pregunta sencilla para los principiantes en programación en lenguaje C: ¿Cuál es la diferencia entre estos dos programas basados en punteros? ¡Gracias por tu ayuda!
Dirección 001 002 004 005
Datos 10 20 40 50
Usamos los dos conjuntos de datos anteriores para ilustrar este punto:
El programa de la izquierda define una variable de puntero temp. p>
El programa de la izquierda define una variable temporal de tipo puntero. Obviamente p1 y p2 también son dos punteros. Podemos asumir que p1=001, p2=002;
. El programa de la derecha Se define una variable de tipo común temp. Obviamente p1 y p2 también son dos punteros en este programa, p1 = 004, p2 = 005,
Datos 10 20 40 50
.Estamos arriba. Tomemos dos conjuntos de datos como ejemplo.
El primer paso del programa de la izquierda: p1 = temp; es decir, 001 a temp,
El segundo paso: p1 = p2, es decir, 002 a p1, en este momento se produce el cambio de dirección de p1, el bloque de memoria al que apunta ya no es 10, sino que apunta a la dirección de los subdatos almacenados en este bloque de memoria 002, que es 20,
Paso 3: p2 = temp; es decir, 002 a temp,
El cuarto paso: p1 = temp; es decir, 001 a temp,
El quinto paso: p2 = temp; es decir, 002 a temporal, en este momento la dirección de p1 ha cambiado. El bloque de memoria al que apunta ya no es 10, sino la dirección de los subdatos almacenados en el bloque de memoria 002, es decir, 20: p2 = temp; es decir, la dirección de almacenamiento de los datos 002,
Paso tres: p2
Paso tres: p2 = temp; es decir, 001 a p2. El puntero de p2 ha cambiado. El bloque de memoria al que apunta ya no apunta a 20 sino al almacenamiento en 001. La dirección de este subdato, que es 10,
El programa de la derecha. No cambia el puntero del puntero, sino que cambia directamente el puntero de los datos en la memoria señalados por el puntero. Puedes analizarlo paso a paso, puedes analizarlo paso a paso, puedes hacerlo.