Fundamentos de punteros en la programación c
Memorice esta frase: Un puntero es una variable que contiene una posición de memoria. Debe aceptar la locura del puntero antes de continuar. Es cierto, aunque se puede llegar a la posición de memoria de una variable, o dirección, mediante el uso de la operador, el puntero es una mucho más poderosa bestia.
Un puntero es un tipo de variable. Al igual que otras variables, debe ser declarado en el código. Además, se debe inicializar antes de que sea utilizado. Esa última parte es realmente importante, pero primero la declaración tiene el siguiente formato:
Tipo * nombre-
Como cuando se declara una variable, la escribe identifica el puntero como un char, int, float, y así sucesivamente. los nombre es el nombre de la variable de puntero, que debe ser único, al igual que cualquier otro nombre de variable. El asterisco identifica la variable como un puntero, no como una variable regular.
La siguiente línea declara un puntero char, compañero:
char * sidekick-
Y esta línea crea un doble puntero:
doble arcoiris-
Para inicializar un puntero, debe establecer su valor, al igual que cualquier otra variable. La gran diferencia es que un puntero se inicializa a la posición de memoria. Ese lugar no es un lugar al azar en la memoria, sino más bien la dirección de otra variable dentro del programa. Por ejemplo:
sidekick = dirigir-
La declaración anterior inicializa el compañero variable a la dirección de la dirigir variable. Ambas variables son tipos-carbón si no, el compilador gruñir como un gato mojado. Después de ejecutar esa declaración, el compañero puntero contiene la dirección de la dirigir variable.
Si usted está leyendo este texto y simplemente asentir con la cabeza sin entender nada, bueno! Eso significa que es tiempo para un ejemplo.
El código fuente en un ejemplo incluye comentarios para ayudar a describir dos líneas fundamentales. El programa realmente no hace otra cosa que demostrar que el puntero compañero contiene la dirección o ubicación de la memoria, de la variable dirigir.
UN EJEMPLO
#include int main () {char plomo-char * compañera de plomo = 'A'- / * inicializar variable de carbón * / sidekick = plomo / * inicializar puntero IMPORTANTE! * / printf ("Acerca de la variable 'lead':n")-printf("Sizett%ldn",sizeof(lead))-printf("Contentst%cn",lead)-printf("Locationt%pn",lead)-printf("And variable "sidekick": n ") - printf (" Contenido t% p n ", sidekick) -Retorno (0) -}
Otras cosas a tener en cuenta: La línea 12 utiliza dos secuencias de escape pestaña para alinear la salida. Además, no se olvide de la en la línea 14, que obtiene la dirección de la variable.
Ejercicio 1: Escriba el código fuente de un ejemplo en su editor. Genere y ejecute.
Aquí está la salida:
Acerca de 'plomo' variables: Tamaño 1Contents alocation 0x7fff5fbff8ffAnd variable "sidekick": Contenido 0x7fff5fbff8ff
Las direcciones (en el ejemplo) son únicos para cada sistema, pero el punto clave a destacar es que el contenido del puntero compañero son iguales a la ubicación de memoria de la variable dirigir. Eso es debido a la asignación, o de inicialización, que tiene lugar en la Línea 9 en el código.
No tendría sentido para un puntero a simplemente contiene una dirección de memoria. El puntero también puede mirar en esa dirección y determinar el valor que se almacena allí. Para que esto suceda, el operador * se antepone al nombre de la variable del puntero.
Ejercicio 2: Modificar el código fuente del Ejercicio 1 añadiendo la siguiente declaración después de la Línea 16:
printf ("valor Peek t% c n", * sidekick) -
Genere y ejecute. Aquí está la salida:
Acerca de 'plomo' variables: Tamaño 1Contents alocation 0x7fff5fbff8ffAnd variable "sidekick": Contenido valor 0x7fff5fbff8ffPeek A
Cuando se especifica el * (asterisco) antes del nombre de una variable puntero inicializado, los resultados son los contenidos de la dirección. El valor se interpreta en función del tipo de puntero. En este ejemplo, * sidekick representa el valor Char se almacena a una ubicación de memoria mantiene en el compañero variable, que es realmente lo mismo que la variable de posición de memoria dirigir.
Ponerlo de otra forma:
Una variable puntero contiene una posición de memoria.
los * puntero peeks variables en el valor almacenado en esa posición de memoria.