Red de conocimiento informático - Aprendizaje de código fuente - ¿Cómo utilizar punteros?

¿Cómo utilizar punteros?

1. ¿Qué es un puntero?

De hecho, los punteros son como otras variables. La diferencia es que las variables generales contienen datos reales reales, mientras que los punteros contienen una dirección que apunta a una ubicación. en la memoria.

2. Definición de punteros

int *pNumber;

Esto define un puntero de tipo int. El nombre de una variable de puntero comienza con p. Este es un hábito que los programadores suelen utilizar al definir punteros para mejorar la legibilidad del programa e indicar que es un puntero. Además, aunque int*pNumber e int *pNumber son iguales, es mejor utilizar el último estilo de programación. Por ejemplo:

int *pNumber1, *pNumber2; significa definir dos punteros, el * número está cerca de la variable, de lo contrario, podemos definirlo como int* pNumber1, pNumber2, lo cual será una definición incorrecta; , pNumber2 No es un puntero.

3. Ventajas de los punteros

a. Proporcionar medios flexibles para que las funciones modifiquen las variables de llamada.

b. Admite subrutinas de asignación dinámica de C

<. p>c. Puede mejorar la eficiencia de algunas subrutinas

gt;gt; Durante la transferencia de datos, si el bloque de datos es grande (como un búfer de datos o una estructura relativamente grande), entonces puede usar punteros. para pasar direcciones en lugar de datos reales, lo que mejora la velocidad de transmisión y ahorra mucha memoria.

d. Proporcionar soporte para estructuras de datos dinámicas (como árboles binarios, listas enlazadas)

4. Asignación y conversión de punteros:

a) Asignación directa de. El mismo tipo, diferente El tipo necesita ser convertido.

b) Conversión forzada: el resultado de la expresión se puede convertir de forma difícil al tipo especificado

c) char * p (int *)p fuerza p al tipo int, recuerde Preste atención a los tamaños de los dos tipos durante el proceso de conversión. Los datos se pueden perder durante conversiones grandes (como int a double)

d) que involucran void *:

void * en c. El tipo se puede asignar a cualquier tipo de puntero y viceversa

Se requiere coerción en c

void * se puede considerar infinito y puede aceptar cualquier tipo de asignación, pero no viceversa int * p = 9; void * t = p (correcto); p = t (incorrecto)

e) Todo lo que no involucre void * debe ser cast

5 Punteros y matrices

El nombre de la matriz sin subíndice devuelve la dirección inicial de la matriz, es decir, la dirección del primer elemento de la matriz, por lo que hay dos formas de acceder a la matriz: subíndice de matriz y. aritmética de punteros. Por ejemplo:

char* pChar;

char chs[100];

pChar = chs; entonces pChar apunta a la primera dirección de la matriz chs.

6. Matrices y referencias

a. Las referencias son solo alias de variables, no punteros a variables (diferentes del operador de dirección "amp;") y no ocupan espacio en la memoria. Cambiar una referencia de variable también cambiará la variable correspondiente.

b. No puede utilizar el operador de indirección de puntero "*" para realizar múltiples operaciones de referencia en referencias

c. count; (c es el alias de count)

7. Asignación dinámica y reciclaje del espacio de punteros

La asignación dinámica es la tecnología clave de los punteros. Se utiliza para asignar memoria y permitir que los punteros apunten a ella sin tener que definir variables. Después de asignar memoria, no olvide reclamarla. Usted asigna dinámicamente un espacio de memoria, pero nunca se eliminará automáticamente. En otras palabras, este espacio de memoria siempre existirá hasta que le digas a la computadora que has terminado de usarlo.

Pero el resultado es que no le dijo a la computadora que ya no necesita este espacio de memoria, por lo que continuará ocupando el espacio de memoria y causará desperdicio. Incluso después de que su programa haya terminado de ejecutarse, seguirá existiendo cuando se estén ejecutando otros programas. . Cuando estos problemas se acumulan hasta cierto punto, eventualmente provocarán que el sistema falle. Por eso es importante liberar espacio una vez que haya terminado.