Tecnología

Inicio

Cómo crear un puntero de memoria en C

C hace un amplio uso de punteros de memoria para el manejo de matrices, llamadas a funciones, estructuras de datos y mucho más. Saber cómo trabajar directamente con los punteros es clave para la codificación eficiente C.

Instrucciones

Crear variables de memoria del puntero

1 Comprender que las variables de puntero de memoria siempre apuntan a los datos de un tipo determinado. Por ejemplo, un puntero a un int es diferente de un puntero a un char. Sin embargo, C no impedirá que pueda mezclar libremente hacia arriba. Hacerlo sólo si está seguro de que sabes lo que estás haciendo.

2 Crear una variable puntero de memoria mediante el uso de la sintaxis que se usa para crear una variable del tipo deseado, pero con un asterisco

() antes del nombre de la variable, así:
int x;

3 Considere NULL. Punteros siempre puede ser nulo (0), por lo que normalmente se utiliza para hacer referencia a un puntero que aún no se ha fijado para señalar en cualquier lugar.

Referencia y Desreferencia

4 Para conocer el posicionamiento.

Hacer referencia se refiere al proceso de encontrar el puntero a una variable existente. En C, el operador de referencia es el signo (&). Por ejemplo:

int color = 5;
int * pointer_to_color;
pointer_to_color = y el color;

5 Utilizar eliminación de referencias.

Dereferencing es el proceso de seguir un puntero a su valor, lo contrario de referencia. En C el asterisco () se utiliza para la eliminación de referencias, como sigue:
printf ( "El color es% d \ n", pointer_to_color);

5 / impresiones /

Uso de las variables de memoria del puntero

6 Pasar de un puntero a la variable cuando se necesita una función para poder cambiar una variable, en lugar de pasar el valor de la variable. Esto permite el uso función de eliminación de referencias para cambiar el valor:

convert_color_to_RGB vacío (color, int

rojo, verde int, azul int) {
rojo = redpart (color);
verde = greenpart (color);
azul = bluepart (color);
}
convert_color_to_RGB (15, y myred, y MiVerde, y MyBlue);

7 Evitar los límites de C. Cada vez que desee pasar una matriz o estructura en una función, debe pasar un puntero en lugar, debido a que C sólo permite tipos de datos individuales para ser pasados ​​a las funciones:

int subtotal (puntuaciones int *, int howmany) {
Total = INT 0, i;
for (i = 0; i <howmany; i ++) el total de las puntuaciones + = [i];
la rentabilidad total;
}

8 Crear un bucle. Como las cadenas son en realidad conjuntos de caracteres, puede crear un puntero a un carácter colocar a través de una cadena:

replace_character vacío (char

s, char de, char a) {
cp carbón;
para (cp = s; cp && cp cp; ++) si (cp) == desde * cp = a;
}

9 Entender la forma en C vistas matrices. Las matrices son manejados por C como punteros, utilizando la aritmética de punteros. C multiplicará automáticamente lo que se agrega a un puntero por el tamaño de los elementos que apunta. Eso significa

puntajes [5] = 17; es exactamente el mismo que

(puntuaciones de + 5) = 17; . Puede utilizar punteros como una forma abreviada de desreferencias matriz. Por ejemplo,
puntajes = 17; siempre se refiere al elemento de 0 ª de la matriz.

Consejos y advertencias

  • En C, hay una línea muy fina entre los punteros de memoria y matrices. En esencia, una matriz es sólo un puntero que apunta a la memoria de un bloque de memoria que consigue asigna automáticamente.
  • Eliminación de referencias a un puntero nulo es un error de tiempo de ejecución fatal. Incluso si usted ha codificado para asegurar un puntero nunca es nula en el momento de la desreferenciar, se debe programar de forma defensiva para evitar el error.
  • El valor real de un puntero no es importante, porque el único propósito de un puntero es eliminar referencia a ella. Sin embargo, para fines de depuración, puede imprimir el valor de un puntero utilizando el código de formato% p. Es una mala idea para atribuir gran importancia a la misma; lo que significa depende de funcionamiento interno del sistema operativo.