Transcripciones
1. 1 Introducción: Hola y bienvenidos este
nuevo curso en el que vamos a
masticar punteros en C. En este curso,
aprenderás qué son punteros, cómo nos permiten
optimizar el código del programa. Y
aprenderás a convertir tipos de datos
complejos en
una secuencia de bytes. Se pueden desarrollar programas
sin utilizar punteros, pero aceleran significativamente la ejecución del código
del programa, lo cual es especialmente importante cuando se trabaja con
microcontroladores. Y en este curso, cubriremos
todo sobre eso. La mayoría de ustedes saben que
los punteros es uno de los temas muy importantes. Por cada ingenieros de
sistemas embebidos. Cualquiera que programa en C debe usar punteros o fallará atrás. Muchas entrevistas o desarrolladores de sistemas
incrustados, entrevistas hacen muchas
preguntas sobre punteros. Y el objetivo de este curso
es ayudarte a empezar y aprender a usar punteros y los diferentes
tipos de punteros de explosión, cubriendo una gran cantidad de temas
importantes. explicaremos todo y te
daremos ejemplos
prácticos, asignaciones, y muchos otros recursos para
ayudarte a dominar punteros en C. Ahora, digamos que estamos reloj arriba lo que vas a
aprender en este curso. Aprenderás
abordaje indirecto usando punteros. Entonces cubriremos diferentes
tipos de punteros. Después de eso,
hablaremos de punteros, dos tipos principales, y
punteros a matrices. También hablaremos de
punteros a funciones. punteros, el vacío,
las variables dinámicas y las operaciones
punteros. Y luego hablaremos tipos de datos, conversión
usando punteros. Y todos estos temas
serán cubiertos en detalles. Nuevamente, tomarás
tareas para que estemos seguros de que tienes
lo que explicamos. También explicaremos ejemplos
prácticos. Los resolveremos juntos para darte una experiencia
práctica. Gracias por ver esta
introducción. Nos vemos por dentro.
2. 2 Introducción a los punteros en C: Hola y bienvenidos a
esta nueva lección en la que vamos a
hablar de punteros. El puntero es una
variable que almacena la dirección de memoria como valor h. Las cosas podrían no estar
claras en este punto. Entonces hablemos primero la sintaxis para
crear un puntero. Entonces
hablaremos de esta definición. Como se puede ver aquí, tenemos sintaxis
diferente para
definir un puntero. El primero es escribir
en el tipo de puntero, agregar el signo de asterisco, luego escribir el
nombre del puntero, agregar un punto y coma. Aquí sucede lo mismo, pero en lugar de
escribir el asterisco cerca del nombre del puntero, lo
estamos escribiendo cerca
del tipo de puntero. La tercera sintaxis es la
misma que las dos primeras, pero estamos dejando espacio después y antes
del signo del asterisco. Ahora, en la práctica, se puede ver aquí que tenemos un
puntero llamado PTR. El tipo de este
puntero es entero. Y para hacer este puntero, hay
que añadir el signo del asterisco. Ahora, aquí lo estamos agregando
justo antes del nombre del puntero. Aquí lo estamos agregando justo
después del tipo de puntero. Y aquí
lo estamos agregando en el medio entre el
nombre del puntero y el tipo. Ahora, como se puede ver aquí, no
hay diferencia
en estas tres sintaxis. Todos definen un puntero que
apunta al tipo entero, que es el
objetivo principal de un puntero. Ahora, de nuevo, un puntero apunta. Este es un puntero que apunta
a una ubicación en la memoria. Por lo que de nuevo, el puntero
es una variable que almacena la
dirección de memoria como su valor. Ahora para dejar las cosas más claras, este es un ejemplo. El domicilio del operador es un operador unario
representado por el símbolo. Y ahora si usted miró
aquí a este símbolo, esto se le llama dirección
del y signo. Da la dirección de cualquier variable si se precede al nombre
de la variable. Para que esto sea más claro, si escribimos esto y x, ahora esta x significa
darme la dirección de x La dirección de x
se almacenará dentro de PTR. Y en este caso
tenemos esta memoria. Y esta es la variable x. Ahora, la dirección de la
variable x es de 1 mil. Ahora, el valor de x es
diez dentro por memoria, pero el riesgo publicitario de x en la
memoria es de 1 mil. Entonces para
llegar a este número, que es de 1 mil,
necesitamos escribir esto y x Entonces PTR aquí igualará 1 mil porque
usamos el no firmado, lo que significa la dirección. Entonces la dirección del operador es un operador que toma
solo un argumento. Es básicamente el y símbolo. Da la dirección
de cualquier variable si se precede al nombre
de la variable. Ahora. Y x es igual a diez, que es esto. Ahora, x es igual a diez. Es una frase correcta. Estamos creando una nueva
variable llamada x. le
estamos dando un valor de diez. Entonces irá a la memoria, creará aquí una nueva variable
llamada x, y le está dando
un valor de diez. Ahora int asterisco signo PTR, estamos creando un puntero de tipo
entero llamado BT off. Y aquí está ese punto
o que creamos VTR. Y el tipo de datos es entero. Ahora, el último paso es agregar una dirección
dentro del puntero. Para hacer eso, usamos esta línea, PTR equivale a dirección de x Ahora un signo, de nuevo, se llama a otros. Vamos a encontrar
la dirección de x, y vamos a almacenar
la dirección de x dentro de BPR. Entonces la dirección de x
aquí es de 1 mil. Por lo que estamos almacenando 1 mil dentro de BT estamos usando esta línea. Ahora. Agregar esto fuera de PTR equivale a qué? ¿ Se puede pensar en ello? Ya mencionamos que y
seno es la dirección de VTR, ahora
es una variable en la memoria. Es un puntero, pero
tiene una ubicación en la memoria. Entonces esto es todo PTR
y el otro, por lo que VTR es 2000s, por lo que t equivale a 2 mil. Por lo que a este signo
se le llama dirección de seno. Ahora, ten en cuenta que ese
puntero en sí es una variable, tiene una dirección en la memoria de datos. Como cualquier variable. La única diferencia
es que el puntero contiene una dirección de
otra variable. No contiene datos regulares, posee una dirección
de otra variable. Ahora, limpiemos la pantalla para que podamos finalizar esto. Ahora, aquí definimos
entero llamado x e inicializarlo
con valor a menudo. Después definimos un puntero
a int llamado VTR. Después de eso, inicializamos el
PTR con la dirección de x. esa manera, tenemos
todo listo. Ahora, podemos hacer algunas operaciones. Primero, ya definimos
nuestra variable llamada x, que tipo es entero, y le dimos un valor de diez. Definimos puntero a n llamado
VTR y lo inicializamos. Ahora en este caso,
mira esta frase. Tenemos el signo del asterisco, y tenemos el nombre del puntero. Y tenemos aquí iguales. Ahora el operador de desreferencia es un operador unario representado
por el asterisco símbolo. A esto se le llama operador de
desferencia. Y hay que
memorizar estos nombres
ya mencionamos y cuál
es la dirección de eso. Ahora tenemos el signo de asterisco, que es el operador de
desferencia. Se dice operador NO, lo que significa que solo
toma una variable. Opera sobre una
variable puntero y da la capacidad acceder
a la variable a
la que apunta el puntero. Ahora las cosas podrían no quedar
claras en este punto, pero lo llamamos d
electrones
porque quita la
necesidad de la dirección. Y te permite
lidiar directamente con la variable a la que apunta
el puntero. Vamos a explicar esto
con un ejemplo. Como puedes ver aquí,
tenemos x, tenemos VTR. Ahora PTR tiene la dirección de x, que es 1 mil, y x tiene un valor de 50. Ahora, ya sabemos que
x tiene un valor de diez. Y para cambiarlo a 50, estamos haciendo lo siguiente. Lo primero que
estamos haciendo aquí es que estamos escribiendo a ese operador de
desferencia. Y lo puedes ver aquí. Entonces el nombre del puntero. Ahora esto significa ir a PTR y
revisar la dirección dentro de ella, que es 1 mil. Y dirígete a la variable
que tiene esta dirección. Entonces en este caso, la
referencia PTR significa x, porque 1 mil
apunta a x aquí, que es esta variable. Y le estamos diciendo que
queremos almacenar 50 dentro de esto. No lo estamos almacenando dentro de
PTR. Ptr sí es esto. Lo estamos almacenando dentro de
esa referencia div de PTR, que es básicamente
la variable x. Por eso quitamos diez. Y ahora un nuevo valor es 50. Ahora aclaremos el ANC
y lo expliquemos de nuevo. Ahora, el valor x es diez. Cuando usamos el operador de
desferencia, que es el signo de asterisco, le
estamos diciendo que desreferencia
PTR, que es un puntero. Desreferenciar un
puntero significa ir a la variable a la que apunta un
puntero. Y en este caso, el puntero está apuntando con esta
dirección a la variable x Entonces al escribir asterisco
o desreferencia PTR, también le
decimos que vaya
a x y que sea igual a 50. Ahora vamos a explicarlo. Si tenemos otra variable, digamos que tenemos y aquí y tenemos 3 mil aquí, que es la dirección. Y tenemos otro
PTR aquí entre R1. Y vamos a sumar la dirección
de y, 3 mil. Ahora si lo escribiste así. Ahora hagamos el valor de 55. Vamos a agregar signo asterisco PT
R1 es igual, digamos 15. Ahora esto significa desferencia. Pt R1 significa ir a la variable o ir
al puntero llamado BT R1. Obtener la dirección de la misma, y comprobar la variable
a la que esta dirección está apuntando esta dirección está apuntandoy el cambio
su valor a 15. Por lo que el primer paso va
al puntero PT R1,
comprobando la dirección. Después de comprobar la dirección, ir a la variable a la que está apuntando
esta dirección, que en este caso es y, y cambiando el
valor de y a 15. Por lo que ahora y es igual a 15. Ahora para resumir las cosas, no firmado significa
la dirección de PTR. Cuando agregamos un
signo de asterisco antes del puntero, estamos desreferenciando
el puntero. Por lo que básicamente le estamos dando la capacidad de acceder a la variable a la que apunta el
puntero. Y este es el objetivo principal
de ese signo de desferencia. Ahora, en la siguiente lección, vamos a resolver un ejemplo
práctico que necesito que intentes
resolverlo por su cuenta. Necesitaba crear un programa
que definiera un entero e inicializarlo con
ellos, luego imprimirlo. Posteriormente, defina un
puntero que apunte a ese entero y
cambie el valor del entero a través
del puntero a B20. Entonces imprímela de nuevo. Ahora la salida esperada es
x antes de que el cambio sea diez. X después del cambio es 20. Asegúrate de resolverlo antes de
pasar a la siguiente lección. Gracias por ver esta lección.
3. 3 Resolución del primer ejemplo práctico: Hola y bienvenidos a esta
nueva lección en la que
vamos a resolver la
primera pregunta. Es necesario crear un programa
que defina un entero e inicializarlo con
diez, luego imprimirlo. Después. Defina un puntero que
apunte a ese interior y cambie el valor de la n a través de los
punteros a B20. Entonces imprímalo otra vez. El producto debe ser éste. X es diez, luego x después cambiarlo usando
puntero, será 20. Para resolver esta pregunta, todos
usan Visual Studio Code. Ve al Menú Inicio y al código visual de estudio a la
derecha. Aquí está. Ahora. Es necesario crear un nuevo
archivo o un nuevo proyecto. Ahora, archivo, nuevo archivo. Y aquí hay que hacer click en seleccionar un idioma y elegir C. Ahora, estamos listos para ir. El primer paso es incluir la biblioteca de salida de entrada std
string.h,
que es la biblioteca principal de salida de
entrada estándar para nuestro programa. Por lo que debería incluir
STD. Orden de grabado. Después de hacer eso,
necesitarás ir a n Quiero decir, esta será nuestra función principal
que se ejecutará, no
tomará nada que sea nulo. Y el primer paso aquí es
definir un nuevo entero. Entonces x es igual a 0. Después imprimir f. Vamos a pedir al
usuario que introduzca el valor. Por lo tanto, por favor ingrese un número. Ahora, necesitamos escanear
este número usando scan f El número que
saldremos que voy a escanear será un número decimal. Así que aquí, correcto. Todo esto fue explicado en
nuestro curso de programación C. Y no hay necesidad de volver
a explicar porque estamos enseñando
punteros aquí. Ahora. Tenemos que imprimir de nuevo el valor anterior
y el nuevo valor. Entonces x antes del cambio. X antes del cambio es
el porcentaje d. Ahora necesitamos cambiar
x usando punteros. Entonces vamos a crear un nuevo puntero. Hagamos que apunte
a la dirección de x. Ahora, para cambiar el valor de x, vamos a utilizar el operador de
desreferencia, que es el PTR astérix, y que sea igual a 20, que es el nuevo valor. Y vamos a imprimir la
misma línea, que es esta. Pero diremos después del cambio. Ahora, tenemos todo
listo y listo. Podemos cambiar esta x con el PTR de referencia y
planificaremos lo mismo. Podemos sumar aquí, esta UTR y la otra disciplina
que esto significa x también, porque estamos desreferenciando
la dirección dentro del PTR, que es la dirección de x, por lo que será el valor de x. UTR y la otra disciplina
que esto significa x también,
porque estamos desreferenciando
la dirección dentro del PTR,
que es la dirección de x,
por lo que será el valor de x.
, observe el código. Simplemente puedes pegarlo
en el Bloc de notas Plus, Plus, como ya
explicamos, y guardarlo. Llamémoslo ejemplo punteros. Ahora tenemos que guardarlo como
punto c. y vamos a ejecutarlo. Ahora qué punteros IGCSE,
ejemplo, nazi. Después de eso, escribe un punto EXE. Y como pueden ver,
es preguntarle a Dios, por favor ingrese un número.
Digamos cinco. Ahora, x antes del cambio es cinco, x después del cambio es 20, que es exactamente lo que
hemos hecho aquí. Cambiamos el valor
de x usando punteros. Eso es todo por esta lección.
Gracias por ver.
4. 4 Apaso por valor y Apaso por dirección en C: Hola y bienvenidos
a esta nueva lección en la que vamos a explicar pase por valor
y pasar por dirección. Ahora, en esta lección, vamos a discutir estas dos pestañas de pasar
el valor y la dirección. El primer tipo se
pasa por valor. Significa que estás haciendo
una copia en memoria
del valor de parámetros reales que se pasa. Una copia del contenido
del parámetro real. Mientras que en el pasado por dirección
o pase por referencia. Básicamente estás haciendo una copia en memoria de la dirección
del parámetro real. Dos no están haciendo una copia
del valor del parámetro. Estamos haciendo una copia en memoria de la dirección
del parámetro real. Ahora, echemos un
vistazo a estos ejemplos. Nuevamente, pass by value hará una copia en memoria del parámetro
real mientras que pasa por dirección o
refinanciación hará una copia en memoria de la dirección
del parámetro real. Entonces aquí estamos haciendo
una copia de la dirección. Aquí estamos haciendo una copia
del parámetro real. Ahora, como se puede ver
en este ejemplo, aquí tenemos una función y esta función se llama
por función de valor. Toma entero x. Ahora esta función
toma un argumento por valor porque toma
un valor real, que es básicamente una
variable x de tipo entero. Ahora aquí, cuando estamos
llamando a la función, estamos pasando la variable que al hacer una copia
del parámetro real. Aquí sólo estamos tratando
con valores reales, parámetros
reales,
no estamos tratando con direcciones. Ahora, cuando se trata de
pasar por dirección o referencia, como se puede ver, en esta función, tenemos
una función llamada por otros función y
toma un puntero como entrada. Entonces entero asterisco PTR, este es un puntero. Ahora, esta función toma
una dirección como extrañas. Entonces la entrada a esta
función debe ser una dirección. Y estamos pasando la
variable z por otros aquí. No podemos añadir porque
es básicamente un valor. Y esta función
quiere una dirección. Entonces aquí agregamos el y signo, que significa la dirección de la
misma. Como se puede ver aquí. Ahora la dirección de z se
pasará a la función de
dirección de bytes. Mientras que aquí el valor de z
será pasar por función de valor. Entonces básicamente estamos haciendo una copia del parámetro
real. Mientras que aquí estamos
haciendo una copia en memoria de la dirección de la cual es la dirección del parámetro
real. Y esta es la principal
diferencia entre pase por valor y
pase por dirección. Existen diferentes casos de
uso y
vas a tomar algunos ejemplos
prácticos. Pero esto es todo lo
que necesitas saber por ahora sobre pasar por valor
y pasar por dirección.
5. 6 punteros incremento y decreto: Hola y bienvenidos
a esta nueva lección. Hablaremos de
operaciones en punteros. Ahora. El primer operativo de la que
vamos a hablar es las operaciones de incremento y
decremento. La
operación de incremento incrementa el valor del puntero en un paso. Ahora, no dijimos por un byte
porque este paso podría ser 148 o cualquier número de bytes
es el tamaño del punto t Ahora, si escribimos PTR plus plus, si asumimos que PTR es
un puntero a entero, entonces cuando estamos
diciendo más, además, vamos un paso entero, que es básicamente cuatro bytes. Dependiendo de tu compilador. El compilador tiene
entero como cuatro bytes. Significa que cada
incremento
agregará cuatro bytes a
la dirección de PTR. Ahora asumiendo que una
dirección PTR es de mil, significa que ahora estamos en 1004 por
estos cuatro bytes. Por lo tanto, cada incremento
o cada
incrementos de puntero incrementará el valor del
puntero en un paso. De nuevo, el stub es el
tamaño de la puntita sin entero o
cadena o carácter, o cualquier tipo de datos. Ahora cuando se trata
del decremento, es el mismo escenario. Disminuye el
valor del puntero en un paso. Está escrito
así, PTR menos menos. Y si asumimos que el
entero es de cuatro bytes, significa que irá
cuatro pasos atrás, se convertirá en 996. Y así es básicamente como funcionan
los incrementos y decrementos. Ahora veamos esto en la práctica. Ahora empecemos con
un simple ejemplo. Hash incluye stdio.h. ahora int main, void. Y seleccionemos el
idioma a ser c. ahora, vamos a crear una nueva
variable y x es igual a diez, y creamos un puntero. Ahora, PTR sostendrá
la dirección de x. Y esto es, estas son
tres frases simples. Ahora, lo que tenemos que hacer es
incrementar o disminuir el PTR. Pero primero tenemos que imprimir. Entonces vamos a escribir impresión f dirección PTR, y necesitamos imprimir la
dirección del puntero. Ahora, agrega P como especificador de
formato. Y p N aquí significa barra de
puntero n. Y después de eso se puede agregar la
dirección de una instancia de ECS. Se puede añadir PTR, ambos trabajos. Ahora agregaremos
la dirección de x. Para evitar que
el anuncio sea correctamente, necesitamos arrojarlo como vacío. Ahora, vamos a correr esto para
ver cómo van a ir las cosas. Así que abre la carpeta conteniendo, primero
guardemos este archivo. Vamos a llamarlo elemento puntero. Veamos. Ahora después de eso,
combinemos este puntero. Vamos a usar ls primero, puntero
GCC dot c. ahora vamos a encontrar un EXE. Y aquí tenemos
dirección PTR es 01, F, 1 cuarto. Ahora podemos correr ese incremento y decremento
para ver cómo van a ir las cosas. Aquí, se puede decir PTR más
plus y PTR menos menos. Ahora notarás que si
reemplazamos esto por PTR, intentemos ejecutar los códigos. Como pueden ver, estamos
obteniendo los mismos resultados. Ahora. Vamos a imprimir lo mismo
después de los incrementos, luego imprimir
lo mismo después del colon. Ahora el
incremento incrementará la dirección en cuatro, que es el número de
bytes y un entero. Entonces lo recuperará por
cuatro usando el decremento. Entonces veamos cómo van a ir las cosas. Volviendo atrás. Vamos a
combinar usando GCC. Vamos a correr. Aquí está. Ahora, como se puede
ver aquí, 61 E14. Después de que aumentamos en
cuatro bytes, son 18. Ahora,
volví a disminuir el valor, PDR menos menos. Así que ahora está de vuelta a uno por
aumentado en cuatro bytes, luego disminuido en cuatro barras. Entonces ve a la ubicación original. Nuevamente, PTR, aumentar y disminuir
dependiendo del tipo del punto. Ahora podemos
cambiarlo a personaje. Ahora si volvemos aquí, intentemos combinar. Ahora corre, como se puede ver, ese actor es sólo un byte. Ahora está a los 17 al
incrementarlo a los 18. Y al disminuir de
nuevo escupir el 17. Para que como se puede ver, el incremento y
decremento ocurre en el nivel de bytes
dependiendo del tipo de datos. Y está incrementando
y decreciendo
la dirección. No el valor. Gracias por ver esta lección. Si tienes alguna pregunta, estoy aquí para ayudar a esto.
6. 7 punteros: adición y resta: Hola y bienvenidos
a esta nueva lección en la que vamos a
hablar de suma y
resta en punteros. Ahora, para restar el
valor del puntero, primero
definamos
un nuevo puntero. Entonces vamos a añadir x es igual a diez. Y esto crea un puntero. Señalemos este puntero
a la dirección de x. Ahora, como en nuestro ejemplo anterior, los
definimos y vamos a hacer
operaciones al respecto. El primer paso es resta del puntero para
restar valor del puntero. Ptr es igual a PTR menos,
digamos cuatro. Porque estamos tratando
con un entero. Aquí están asumiendo que el
entero es de cuatro bytes. Pero puedes restar cualquier valor. Ahora una vez que ejecutes
este comando, si asumimos que la
dirección PTR es de mil, ahora se convertirá en 960 o 84, lo siento, porque tenemos cuatro bytes y cuatro
por cuatro es de 16 bits. Entonces volvimos 16 poco. Ahora bien, esto es cuando
se trata del nivel de bits. Ahora para hacer las cosas más
claras, vamos a imprimir. Gracias. Así imprimir f, dirección, valor, el porcentaje
sea costura y barra. Ahora aquí queremos
imprimir el valor PTR. Debemos arrojarlo. Y luego podemos sumar B2. Ahora para imprimir el valor después de
que restáramos cuatro de él. Volvamos y
ejecutemos esto. Así que ahorre. Este es el nombre de nuestro expediente. Así que vamos a copiar el nombre. Ahora. Vamos a ejecutar este código. Ahora, compilador GCC E. Y aquí lo tenemos. Como se puede ver aquí. El valor antes de la
resta es si B14. Ahora el valor después de la primera
resta, la resta es 04. Y aquí volvimos. Como se puede ver,
restamos cuatro de esto. Ahora, sabe exactamente
cuántos pasos volvimos. Vamos a restar uno. Ahora guarde de
nuevo ese código, vuelva atrás, combinado y ejecute el código. Ahora como se puede ver,
cuando restamos uno, pasamos de 14 a diez. Volvimos cuatro escalones. Ahora si restamos cuatro, vamos a retroceder 16 paso. Ahora, otra cosa
que puedes hacer con punteros es restar
puntero del puntero. Entonces vamos a crear otra
variable. Llamémoslo y Y vamos a crear
otro puntero. Llamemos a
éste y a esta herramienta. Y vamos a cambiar
los valores x e y. beta1, beta2. Aquí tenemos PTR uno, y aquí tenemos PTR C2. Ahora, lo que tenemos que
hacer es lo siguiente. Vamos a crear int x
igual R1 menos PTR a. Aquí estamos asumiendo que
tenemos dos punteros. Y ambos son
punteros a entero, que es de cuatro bytes. Ahora PTR uno menos beta dos devolverá el número
de pasos entre ellos. Entonces hagamos esto. Y el último paso es la impresión. El resultado es
porcentaje d slash n. y n. aquí tenemos que
agregar x sobre x. ahora, volvamos
a la línea de comando. Ahora. Tenemos problema aquí. X se define de nuevo, por lo que necesitamos hacerlo. Ahora, como se puede ver aquí, tenemos punto o uno más. Tenemos punteros a abordar. Y restamos puntero
una herramienta de puntero de fotograma. Y nos enteramos que el espacio entre ellos es este número. Ahora cuando se trata de
la adición de punteros, podemos agregar un valor a un puntero. Para ello,
simplemente podemos hacer lo siguiente. Podemos decir PTR V1 es igual a
V2 R1 más digamos cuatro. Y podemos imprimirlo usando el comando print
que todos hemos utilizado. R1, vacío B a R1. ¿ De acuerdo? Ahora, ya sabemos que tenemos sobre otros se
imprimirán aquí. Entonces veamos cómo esto
afectará el resultado. Ahora, editar EXP. Y aquí estamos. Esta es la dirección PT R1. Y esta es la
dirección después de agregar cuatro al valor PT R1. Como se puede ver, se
mueve del 08 al 18. Y de esto es de lo que
estamos hablando. Puede agregar o restar
valores fácilmente dependiendo
del tipo de operación. Ahora, lo que
no está permitido es, así que agregar un puntero a
un puntero
como el, como, restarlos
aquí está prohibido. No está permitido, y
resultará en un error del compilador. Si intentas agregar punto a
1 o dos con un signo más, obtendrás un error de
compilación. Por lo que sólo se permite agregar
un valor al puntero. No está permitido sumar
dos punteros juntos. Pero puedes restar el
valor de un puntero, o puedes restar dos
punteros el uno del otro. Eso es todo por esta lección. Si tiene alguna pregunta por favor pregunte y si
estás en el tablero.
7. 8 punteros y matrices: Hola y bienvenidos a esta
nueva lección en la que
vamos a hablar de
matrices y funciones. Ahora, lo primero que debes saber
es que el nombre de la matriz es la dirección
del primer elemento en ella. Entonces si guardamos y ARR, que es una matriz que
tiene diez elementos, entonces esta es la
dirección del SE, del primer elemento y la
matriz que es el elemento 0. Es exactamente como decir
en riesgo de un son todos 0. Estos dos son idénticos. Así que definir una matriz
usando este método significa que estamos apuntando a la dirección del primer
elemento en la matriz. Ahora, todos los elementos de la matriz se guardan secuencialmente
en la memoria. Lo que significa que si
tienes un puntero al primer elemento
de la matriz, incrementando el puntero
hace que el punto o puntos al segundo elemento y sigas incrementándolo
para llegar al tercero, cuarto, quinto, y así sucesivamente. Ahora, otra
cosa buena a saber es que tratar con la
matriz y el hecho que los datos
animales sean la dirección de su primer elemento
nos permite hacer muchas cosas usando matrices
usándolas como punteros. Nuevamente, ARR aquí es la
misma que la dirección de 0. Lo que significa que si
pasa el nombre de matriz ARR a la función llamada,
digamos función. Entonces función. Y se lo damos. Entonces en este caso, estamos pasando dirección. No estamos pasando valor. Por lo que este
prototipo de función debe
declararse como seguir función de
vacío. Y aquí tenemos que asegurarnos que estamos agregando un puntero. No estamos pasando por valor. Estamos pasando pastel Alice, pesar de que estamos escribiendo, no
estamos escribiendo nada que indique que se
trata de un puntero. Pero como ya mencionamos, este es el nombre de nuestra matriz. Y el nombre de la
matriz es básicamente la dirección del primer
elemento en la matriz. Y esto viene mucho, un MCQ preguntas y entrevistas y en muchos
escenarios diferentes. Ahora dentro de la función, cuando queremos desreferir PTR, que es el puntero. Esto significa que estamos accediendo al primer
elemento de la matriz. Y si lo hicimos, incrementamos el PTR en uno. Entonces estamos accediendo al
segundo elemento de esa matriz. B a R. Dos es el tercer
elemento, y así sucesivamente. Es necesario asegurarse de tener estas notas en mente
cuando se trata matrices dentro de C. Porque matrices son muy
parecidas a los punteros, y la comprensión de los punteros
hará tratar con matriz son un trabajo
mucho más fácil. Ahora, otra nota importante es que TR subíndice y operador de
desferencia
al tratar con punteros y matrices. Ahora, el operador de subíndice, que es estos dos signos, se usó con matrices cuando
estamos definiendo una nueva matriz. También se puede utilizar
con punteros. Entonces digamos que
tenemos un puntero. Entonces comentemos. Ok. Digamos que
tenemos un puntero, PTR. Ahora, cuando decimos PTR 0, usando este operador de subíndice, significa
lo mismo que decir,
hermoso detalle de baile. Estos dos son idénticos. Estamos llamando al primer elemento o la primera dirección
del puntero. Ahora, cuando queremos acceder a la segunda dirección después de
la dirección puntero, simplemente
podemos escribir PTR uno. Y entonces este caso
estamos accediendo a la dirección al lado de
esa primera dirección PTR. Y es lo mismo que
ahora PTR uno aquí es
lo mismo que desreferenciar
PTR blas uno. Y PTR diez, por ejemplo, es lo mismo que desreferenciar
PTR que había perdido diez. Y este es el punto principal aquí. Podemos usar el subíndice dos. Operador con punteros, al
igual que matrices para alcanzar o
encontrar un elemento exacto. Ahora, para aclarar aún
más las cosas, ¿por qué no? Lo intentamos con un ejemplo
práctico. Vamos a quitar todo esto. Ahora. En primer lugar, definiré una función. Y como la mayoría de ustedes saben, para definir una función, primero, necesitamos llamar al prototipo
o iniciar un prototipo. Y luego necesitamos implementar la función, la implementación de la
función. Entonces tenemos que llamarlo. Entonces empecemos primero con el prototipo.
Vamos a llamarlo divertido. Y aquí y asterisco PTR. Entonces esta función tomará PTR o puntero como entrada
y para devolver nada. Ahora, encontremos la implementación de la
función. Quita esto, agrega
dos llaves rizadas. Aquí adentro. Tenemos que agregar un bucle for. Dentro de esto para bucle
se bucle de 0 a, digamos, diez I plus plus. Y aquí,
necesitamos agregar impresión f. Y aquí tenemos que
imprimir los valores. Y seríamos demasiado duros. Pero en lugar de
luchar solo al PTR, usaremos el subíndice TR y agregaremos igual que con matrices. Después de hacer eso,
podemos llamar a la función. Ahora aquí viene el truco. Cuando estamos llamando a
la función, no
estamos pasando, digamos un valor, estamos pasando una dirección porque como se puede ver en
la implementación de la función, estamos recibiendo un puntero. Ahora vamos a crear una matriz
y ARR entonces iguales, y vamos a darle diez valores. Entonces 12345678910. Ahora, para pasar una
dirección a esta función, podemos hacerlo usando la matriz. Como ya mencionamos. Ya mencionamos que
la matriz o matriz de diez es básicamente de la
misma manera que llamar al primer
elemento dentro de esa matriz. Entonces para llamar a la dirección del
primer elemento, necesitamos pasarla usando ARR sin escribir
nada más. Ahora, esto
asegurará que el funk reciba la dirección
del primer elemento. Y aumentará
esta dirección en
una usando subíndice PTR aquí mismo. Por lo que bucle desde
el primer elemento hasta el último elemento y
verá esto en acción. Salvemos esto y volvamos. Ahora, matrices GCC, punteros. Veamos. Ahora como pueden ver, aquí
tenemos un tema, que es el hecho de que
yo no esté definido. Entonces vamos a definirlo. Nuevamente. Ahora. Como se puede ver, acabamos de
imprimir la matriz sin tener que pasar el
valor de esta matriz. 12345678910. Y solo pasamos la dirección del primer
elemento de esa matriz. Utilizamos el
operador de subíndice puntero para recorrer esta matriz simplemente moviéndose
de una dirección a la siguiente, a la siguiente
al aumentar una, el PTR usando ese diesel
o el operador de subíndice. Sé que las cosas podrían ser un poco confusas
en este punto, pero con este ejemplo, hay
que echar un
vistazo rápido a este ejemplo de nuevo. Intenta ver esta lección
más de una vez para digerir la
información dentro de ella. Ahora, hagamos un resumen rápido. El nombre de la matriz es la dirección de su
primer elemento. Entonces si tenemos esta matriz, entonces ARR aquí está la
dirección de la matriz 0. Ahora, si pasas el nombre de la matriz o como en este caso
a esta función, entonces estás pasando
dirección a fin. La función.
El prototipo debe declararse con un
puntero como entradas. Ahora, dentro de la función func, cuando desatendemos PTR, entonces estamos accediendo al
primer elemento de la matriz. Y podemos acceder
al primer elemento ya sea
escribiendo PDR, último para acceder
al segundo elemento. O simplemente podemos usar PTR. Y aquí estamos usando
subíndice o para I. Y estamos empezando por el
primer elemento abordado. Entonces añade el segundo elemento, el tercer elemento. Y digo aquí, lo haría simplemente, porque estamos tratando
con direcciones, no
estamos tratando con valores, porque acabamos de
recibir
la dirección del primer elemento y
estamos haciendo bucle a través
de las direcciones. Y estamos imprimiendo
el valor al que apuntan
estas direcciones. Eso es todo. Este no es
un ejemplo fácil, lo sé. Pero de nuevo, los operadores
o digamos punteros no son algo
fácil de aprender. Es por eso que necesitas
ver esta lección más de una vez para digerir
la información dentro de ella. Si tiene alguna pregunta o si algo no está claro
en esta lección, por favor pregunte y la mandíbula, estaré más que feliz de ayudar. Gracias por ver.
8. 9 punteros salvajes y nulo: Hola y bienvenidos
a esta nueva lección en la que vamos a
hablar de puntero colgando
y punteros salvajes. Un puntero colgado apunta a una dirección de memoria que
solía contener una valiosa. Dado que la dirección
a la que señala ya no se conserva, utilizarla dará lugar a
un resultado esperado. Entonces para ver
esto en acción. Ahora, aquí, el primer
paso es crear un puntero. Así n astérix PTR. Ahora lo que tenemos que hacer es
usar la función malloc. Esta función malloc
volverá nula. Entonces necesitamos lanzar a
un asterisco entero, que es el puntero
a entero para
convertir puntero vacío en puntero entero. Así que vuelve aquí
y escribe entero, que es básicamente
un puntero entero. Ahora proceda con el
modelo y necesitamos llamar
al tamaño de la función. Y vamos a resolver el tamaño
de entero dentro de aquí. Después de hacer eso,
crearemos una variable, llamaremos a, y la
haremos igual 560. Entonces necesitamos hacer el punto o puntos
a la dirección de una Entonces usaremos
esa función libre. La función simplemente
desasignará la memoria. Por lo tanto correcto, ser PTR. Eso es todo. Ahora, sí liberamos ese puntero. Ya mencionamos que el puntero
colgado apunta a una dirección de memoria que se
utiliza para sostener la variable. Dado que la dirección
a la que señala ya no está reservada, usarla dará lugar a resultados
inesperados. Ahora, para mostrarles el resultado
inesperado, podemos hacer lo siguiente. Hicimos el asignar el PTR. Por lo que podemos escribir PTR igual a
cinco para almacenar cinco dentro de esa desferencia
VTR, que es una. y el último paso es la impresión. Entonces imprimir f. Y aquí usaremos porcentaje d para planear
la referencia de PTR. Ahora guardemos el código. Y aquí estamos probando
en puntero colgando. Entonces regresa, CLS, GCC. Vale, ahora esto ves punteros
colgando c, k. ahora tenemos un problema. Olvidamos incluir un CD en vivo. Entonces vamos a incluirlo. Guardó el código, y regresa. Nuevamente. Aquí estamos. Ahora como se
puede ver aquí, sí
compilamos este código. Ahora, vamos a ejecutarlo un EXE. Y como se puede ver,
está parpadeando. Ahora no hemos
recibido nada. Debería haber impreso que
diferentes frentes de PTR. Pero como ya mencionamos,
desasignamos PTR. Por lo que este es un
puntero colgado y usarlo después de la asignación
resultará en resultados
inesperados. Esto es lo que es un puntero
colgando. Nuevamente, un
puntero colgado es un puntero que apunta a eliminarlo
o a los objetos asignados. Y hay que
asegurarse de que no trazar tales escenarios. Y trata de evitarlos. Trata de no jugar con punteros. Los asignan o
los eliminan sin saber
lo que estás haciendo. Ahora el segundo tipo de
punteros son los punteros salvajes. Ahora, comentemos esta parte. Mientras que el puntero es un puntero que se utiliza antes de la inicialización. Un ejemplo de eso
es este extremo PTR. Si utilizamos la declaración print
f e
intentamos imprimir PTR usando
la desreferencia PTR. Todavía no hemos inicializado
el PTR con una dirección. Entonces a esto se le llama
puntero while. Ahora guarda tus códigos, vuelve atrás y combínalo, luego corre. Como se puede ver, de nuevo, un resultado inesperado porque
este es nuestro puntero. No hemos inicializado
este puntero. Y por eso
estamos enfrentando esto. Ahora. No se dibujan flechas, pero no hemos recibido
ningún resultado porque. Este puntero no se
inicializó para empezar. Ahora, ¿cómo convertir un
puntero válido en otro? Entonces mientras puntero, es fácil. Como se puede ver, ya
creamos el puntero, por lo que necesitamos que
apunte a algo. Podemos inicializarlo simplemente
creando otro entero, llamarlo, darle un valor de diez. Entonces diremos que PTR
igualará la dirección de x Eso es todo. Y ahora podemos volver a ejecutar
ese código. Como se puede ver, tenemos cinco, que es el valor de x Y este ahora no es
un puntero salvaje. Por lo que tuvimos que inicializar el puntero para que
no fuera un puntero salvaje. Y así es básicamente
como se hace. Entonces comentemos esta parte, y hablemos de
otro tipo de punteros, que es un puntero nulo. Ahora para asegurarnos de
que no tenemos nuestro punto final o podemos inicializar
un puntero con analogía, convirtiéndolo en un puntero nulo. La forma más fácil de
hacerlo es simplemente copiando este extremo asic PTR, que es la
inicialización del puntero. Y luego se cuenta
el conocimiento correcto. Eso es todo. Esto se llama puntero nulo. Ahora también podemos
imprimir este puntero. Manos.
Ya puedes ver que estamos jugando, imprimiéndola, pero
no es imprimir nada porque es un
puntero nulo y un puntero vacío. puntero nulo apunta a
nada o a la dirección de memoria a que los usuarios no pueden acceder Entonces en este caso, a esto se
le llama puntero viejo. Entonces llamemos a este vino. Llamemos a esto colgando, y llamemos a
este puntero nulo. Ahora, otro tipo de punteros
es el puntero vacío. puede usar un puntero vacío para apuntar a una variable
de cualquier tipo de datos. Se puede reutilizar para apuntar a
cualquier tipo de dato que lo deseemos. Y se declara
fácilmente escribiendo punto astérix
vacío
o PTR es igual a nulo. A esto se le llama puntero vacío, ya que son de naturaleza muy
general, también se
les conoce
como punteros genéricos. Con su flexibilidad, los punteros
vacíos también trae algunas limitaciones. Los punteros de vacío no pueden ser desreferenciados como
cualquier otro puntero. Ahora, si intentas
desreferenciar un puntero vacío, terminarás enfrentando un error. Si estás buscando realizar operaciones
aritméticas
en punteros vacíos, entonces necesitas escribir
cast estos punteros. Ahora, typecasting es básicamente otro tema y no
vamos a cubrirlo aquí. Pero hay que mecanografiarlo si lo vas a utilizar
y operaciones aritméticas, punteros
vacíos
de grandes funciones de biblioteca Hughes y C
como malloc y calloc, que asignan dramáticamente memoria devolvió punteros de vacío. También está la fuente de tono
y la función de clasificación incorporada en C que tiene una función
como argumento,
que a su vez toma
punteros nulos como argumento. Ahora, estos vienen en su mayoría
el puntero vacío, puntero
nulo, puntero salvaje, y puntero colgado
generalmente viene y entrevista preguntas
y las preguntas del MCQ. Por lo
que debes asegurarte de tener todas estas inflamaciones
escritas en un cuaderno para que puedas
revisarlo cuando lo necesites. Y no tienes que
memorizarlas todas, pero necesitas saber exactamente
lo que cada uno de ellos está haciendo. Ahora, hagamos una revisión rápida. Un puntero colgando. El primero es un puntero que apunta a eliminarlo
o al objeto asignado. El puntero salvaje, que
es el segundo, es cualquier punto o que se
utilice antes de la inicialización. Ahora para que no sea puntero salvaje, podemos hacerlo simplemente
usando el puntero nulo. Y el último de nuestra lista
se llama puntero vacío, que es un puntero que se puede utilizar para apuntar a una
variable de cualquier tipo de datos. También se puede utilizar para apuntar a cualquier tipo de datos que queramos utilizar. Se declara simplemente
escribiendo void ante el nombre del puntero y el signo astérix y
dándole un valor de null. Eso es todo por esta lección.
Gracias por ver.