Hola y bienvenido de nuevo.
En esta conferencia, quiero hablar sobre la relación entre punteros y matrices.
Existe una relación sólida, y necesitamos comprender esta relación antes de poder hablar
realmente sobre aritmética de punteros. Entonces empecemos.
Una matriz es una colección de objetos del mismo tipo
a los que puede hacer referencia con un solo nombre. Sabemos que ahora somos bastante buenos con las matrices.
Hemos estado usando la matriz de caracteres durante algunas secciones.
Es una matriz a la que puede acceder mediante un índice
o subíndice dentro de esos corchetes. Recordamos eso.
Sabemos que las matrices tienen una base cero y comienzan en cero.
Pero, de nuevo, es solo una forma de mantener varios meses con el mismo nombre de variable.
Un puntero es una variable que tiene su valor, una dirección de memoria como su
valor y puede
hacer referencia a otra variable o constante de un tipo determinado.
En este punto, también deberíamos tener bastante claro qué es un puntero.
Solo tiene una dirección de memoria.
Puede usar un puntero para contener la dirección de diferentes variables en diferentes momentos.
Pero tienes que tener el mismo tipo. Un puntero int tiene que
apuntar para restaurar la dirección de un tipo int.
Las matrices y los punteros parecen bastante
diferentes, pero están estrechamente relacionados y, a veces, se pueden usar indistintamente, especialmente
con la matriz de caracteres.
De hecho, puede crear un carácter y recordar que es
una cadena y puede crear un puntero de carácter que es esencialmente la misma cosa.
Solo hay pequeñas diferencias si
asigna o no memoria y la libera con un puntero de carácter.
Con una matriz de caracteres, no tiene que
hacer eso, pero un carácter a también tiene un tamaño fijo.
Entonces, si crea una cadena de matriz
de caracteres con 20 como tamaño, solo puede almacenar 19 caracteres.
Con el puntero de caracteres, puede utilizar la gestión de
memoria dinámica y puede hacer que el tamaño aumente o disminuya, puede ser
más eficiente con respecto a la memoria.
Pero uno de los usos más comunes de los punteros en c es como punteros a matrices.
Aquí es cuando usa
con más frecuencia punteros, especialmente a caracteres.
El puntero de caracteres es lo mismo que una matriz de caracteres.
Las principales razones para usar punteros para
borrar son de conveniencia de notación y de eficiencia del programa.
Por lo tanto, puede usar una matriz o un puntero en muchos casos,
excepto cuando se habla de administración de memoria dinámica.
Pero en la mayoría de los casos puede hacerlo. Y realmente la única diferencia es su
sintaxis, es la notación.
Es si usa o no un subíndice para acceder a un elemento
o si usa o no aritmética de
puntos si usa o no el puntero de carácter para apuntar a la dirección específica de ese elemento.
También es más eficiente usar punteros de caracteres.
Los punteros a matrices generalmente dan como resultado un código que usa menos memoria y se ejecuta más rápido.
Por lo tanto, desea utilizar un puntero para los caracteres tanto como sea
posible y también un puntero para otros tipos de datos.
Porque es más rápido y consume menos memoria. Punteros sobre matrices en su mayor parte.
Si tiene una matriz de 100 enteros, sabemos
lo que esto significa, simplemente diga que el valor int es 100. 100 es el tamaño.
Eso significa que puede almacenar 100 enteros en esa matriz.
También puede definir un puntero. Vamos a nombrarlo puntero de valores ya
que apunta a la matriz
de valores y se puede usar para acceder a los enteros contenidos en esta matriz.
Así que solo decimos puntero de valores de instar. Sabemos cómo declarar un puntero en este punto.
Cuando define un puntero que se utiliza para señalar los
elementos de la matriz, no designa el puntero como tipo puntero a matriz.
Hasta este punto, todo lo que hemos oído hablar es del puntero al final,
del puntero al doble.
Pero cuando usa matrices, no dice matriz puntiaguda.
Ese puntero real apunta a un elemento específico contenido en la matriz.
Así que tenlo en mente. En realidad, no es una matriz completa
cuando borra un puntero con la dirección de valores.
Entonces, para configurar el puntero de valores para que apunte al primer elemento de la matriz de valores, todo lo que
tiene que hacer es decir que los valores apuntan o son valores iguales.
No tienes que poner la dirección ahí ni nada. Porque la
matriz de valores es un puntero.
Eso es lo que tienes que conducir en tu cabeza,
todas estas matrices son punteros debajo del capó.
Entonces, si desea asignar el primer elemento de
una matriz a un puntero, todo lo que tiene que hacer es especificar la matriz en el
lado derecho del operador igual y
en el lado izquierdo solo tiene el puntero de valores.
Esto apuntará a la primera dirección de la matriz o al primer elemento.
El operador de dirección no se utiliza, tenga en cuenta eso.
El compilador de c trata la apariencia de un nombre de
matriz sin un subíndice como un puntero a la matriz.
Entonces, especificar valores sin un subíndice tiene el
efecto de producir un puntero al primer elemento de valores.
Entonces, lo que esto significa es que ahora puede apuntar a los
valores subsiguientes en la matriz simplemente incrementando el puntero, para ir a la siguiente dirección.
Y de eso vamos a hablar en las próximas conferencias cuando hablemos de aritmética de puntos.
Y en realidad es solo una cuestión de notación y también una cuestión de eficiencia.
Entonces, una forma equivalente de producir un puntero al inicio de los valores es
aplicar también la dirección del operador al primer elemento de la derecha.
Entonces puedes hacerlo de dos maneras, de cualquier manera está bien.
Pero también podrías hacer esto. Se podría decir la dirección del puntero de valores de valor bajo cero.
Eso establecerá el puntero de valores al primer elemento de la matriz.
Entonces puede usar este o simplemente puede decir que el punto de los valores es igual al valor.
Obviamente, sin el ampersand y sin el subíndice,
es un poco más menos código o más fácil de escribir.
Esto puede ser un poco más claro
porque no necesariamente sabe que los valores son una matriz a menos que mire la declaración.
Pero de nuevo, de cualquier manera está bien. El puntero de valores es igual a valores o
el puntero de valores es igual a la dirección del valor bajo cero.
Es una cuestión de preferencia del programador. Y nuevamente, es una cosa de notación.
Entonces, solo
para reiterar, cuando tienes dos expresiones ar
sub-i y asterisco ar más i, esas
son equivalentes en significado.
Así que solo queremos asegurarnos de que comprenda esto.
Ambos funcionan si ar es el nombre de una matriz.
Puede usar el puntero y puede quitarle la referencia.
Y ambos funcionan si es una variable de puntero.
Usar una expresión como ar plus plus solo funciona si ar es una variable de puntero.
Por lo tanto, no puede incrementar una matriz
diciendo más más y esperar que vaya al siguiente elemento.
Solo puede hacer eso en punteros de matriz o punteros.
Entonces, si tenemos ar, es un puntero que apunta a una matriz y
queremos ir al siguiente elemento, podemos incrementarlo cada vez.
Pero si dice ar sub-i porque ar sub i es una matriz y
una matriz es un puntero, puede eliminar la referencia diciendo que ar que es
ar es un puntero
que le hemos asignado ar más i, es lo mismo.
Entonces, en las próximas conferencias, hablaremos sobre aritmética de puntos
y esto se relaciona fuertemente con la relación entre matrices y punteros.
Los punteros pueden ser matrices. No es una matriz de punteros, es un elemento.
Entonces puede usar la dirección de un puntero para navegar a
través de una matriz, iterar a través
de una matriz. Gracias.