Hola y bienvenido de nuevo.
En esta conferencia, quiero hablar sobre la definición de punteros, principalmente la sintaxis
para declarar reportero y luego usar la dirección del operador para asignar una
dirección de memoria a un puntero.
Así que hasta este punto, deberíamos tener claro que un
puntero no es más que una variable que
apunta a una dirección de memoria o contiene una dirección de memoria como su valor.
Entonces, declarar un puntero no es lo mismo que crear un puntero normal.
Entonces no puede hacer algo como un puntero.
Esa no es la forma de declarar un puntero. La sintaxis es ligeramente diferente.
Utiliza un asterisco. Por tanto, no basta con decir que una variable es un puntero.
También debe especificar el tipo de variable a la que apunta el puntero.
Los diferentes tipos de variables ocupan diferentes cantidades de almacenamiento.
Algunas operaciones de puntero requieren conocimiento de ese tamaño de almacenamiento.
Entonces, al igual que una variable regular cuando especifica un tipo de
datos, cuando crea una variable de un tipo de datos
de puntero, también debe especificar ese tipo de datos.
Puede declarar un puntero a una variable de tipo int haciendo lo
siguiente, int star o asterisk p number.
Eso te dirá que es un puntero.
El int tiene el mismo aspecto, pero después de eso está el asterisco.
El asterisco significa que es un puntero y, a continuación, especifica el
tipo de puntero en sí. Este es un puntero int.
El tipo de la variable con el nombre p números int estrella.
Puede almacenar la dirección de cualquier variable de tipo int.
Un puntero almacena direcciones. Entonces, si va
a almacenar la dirección de otra variable, esa
variable debe definirse como un tipo entero.
Así que aquí PI apunta a
la variable int,
char star pc, eso apunta a una variable de carácter,
float star pf star pg, esos son punteros a variables flotantes.
Así es como los define, los tipos importan.
El espacio entre el asterisco y el nombre del puntero es opcional.
No tienes que poner un espacio ahí. No puedes tener espacio.
Lo que termina sucediendo, y
vamos a hablar sobre la desreferenciación de una variable, es que usualmente usa un espacio en la declaración
y luego, cuando está desreferenciando, no lo usa.
Entonces, todas estas declaraciones deben contener un espacio por convención.
El valor de un puntero es una
dirección, por lo que debe representarse internamente como una imagen sin firmar en la mayoría de los sistemas.
Entonces todavía tiene que almacenar algo. Da la casualidad de que almacena un número hexadecimal.
Y aunque lo almacena como si fuera un número entero,
no lo considere un tipo entero.
Las mismas cosas que puede hacer con los números enteros, no necesariamente las puede hacer con los punteros y viceversa.
Entonces, aunque si intenta imprimirlo, se verá como un número, un número hexadecimal, no significa
que pueda tratarlo como un número entero.
Puede multiplicar un número entero por otro, por
ejemplo, pero no puede multiplicar un puntero por otro.
Un puntero es realmente un tipo nuevo, no es un tipo entero.
El porcentaje p representa el formato especificado para punteros.
Voy a mostrar los diferentes datos de un puntero y veremos cómo se usan.
Las declaraciones anteriores crean
la variable pero no hay inicialización. Allí no hay ninguna asignación.
Si siempre desea asignar un valor
a un puntero, es muy peligroso si no lo inicializa.
Entonces, desea inicializar un puntero cuando lo declara.
Si no sabe en qué inicializarlo
si no es la dirección de otra
variable o no asignó memoria dinámicamente para ello, puede usar un puntero nulo.
Entonces puede inicializar un puntero para que no apunte a nada.
Haces esto usando null.
Dices que el número p de instar es igual a nulo para un puntero a un int.
Null es una constante definida por la biblioteca estándar.
Es el equivalente de un cero para un puntero.
Significa que no apunta a nada.
Está garantizado que no apuntará a ninguna ubicación en la memoria.
Por lo tanto, es bueno que desee hacer esto porque lo que significa es que no cometerá
ningún error al realizar accidentalmente un desbordamiento del búfer o al escribir en la memoria
en la que se supone que no debe escribir.
Al inicializarlo con esto, en realidad limita algunos errores que puede cometer.
Hablamos de null un poco antes. Hablamos del carácter nulo.
Ese concepto es diferente del puntero nulo.
Un puntero nulo significa que no apunta a nada y debe inicializarse con eso.
Debe agregar una directiva de inclusión para la definición estándar. h si desea utilizar la
definición nula aquí.
La dirección del operador. Si desea asignar su puntero a
la dirección, puede
utilizar el operador de dirección de una variable existente.
Entonces, si desea inicializar su variable con la variable add o sub que tiene,
ya ha declarado que usa la dirección del operador, el ampersand.
Hemos visto esto cuando hablamos de la función scanf.
Aquí estamos asignando una variable de valor entero 99.
Estamos creando un puntero de tipo int y le estamos asignando la dirección de número.
Podemos hacer esto porque el número es
un int y el puntero que creamos también apunta a un int.
Entonces, todo lo que tenemos que hacer después del operador igual es usar el ampersand.
Y ahora p número va a contener la dirección del número.
El valor inicial de p número es la dirección del número de variable.
La declaración del número debe preceder a la declaración del puntero que
almacena su dirección porque
no se puede asignar a un puntero algo
que no tenga memoria asignada.
Si intenta asignar a ese número de puntero, el número no existe a menos que lo haga después.
Para asignar una dirección a un
puntero, esa dirección debe tener memoria asignada.
De lo contrario, el compilador se va a quejar.
Sin embargo, tenga cuidado porque no hay nada especial en la declaración de un puntero.
Puede declarar variables y punteros regulares en la misma declaración.
Entonces podría decir valor doble, valor p f num.
En esta declaración aquí, esta es la
única segunda variable p val es un puntero, las otras dos son solo dobles.
Eso es un poco más explícito, un poco más
obvio en esa declaración. Pero, ¿qué pasa si dices en
star pq, esto implica que ambos son punteros y no lo son?
Aquí solo tenemos un puntero int que es p, la
variable q es solo para escribir int.
Es un error común pensar que tanto p como q son indicadores.
Así que tenga cuidado cuando declare un puntero en muchas variables en la misma línea.
También es una buena idea usar nombres que comiencen con p como nombres de puntero.
Esto le dirá que esa variable es un puntero con solo mirarla.
Así que normalmente haces todas tus declaraciones de variables en la parte superior
de un programa, normalmente dentro de la función principal.
Y cuando vea esas variables utilizadas más adelante
en el programa, puede identificar fácilmente los diferentes tipos de datos
o los diferentes tipos de puntero porque tienen p como prefijo.
Así que esta lección solo
repasó cómo se puede definir, declarar un puntero y luego asignar una
dirección de una variable existente a un puntero.
Ahora bien, hay casos en los que no desea asignar
necesariamente un valor de puntero a una variable existente, tal vez desee asignar nueva memoria.
Hablaremos de ellos en la siguiente conferencia. Pero ahora mismo, lo mantendremos simple.
Nos centraremos en usar punteros de tipo
ints y diferentes tipos fáciles como dobles o flotantes.
Y nos vamos a concentrar en
asignar las variables existentes, la dirección y ver cómo funciona.
Así que sigamos adelante. Gracias.