Hola y bienvenido de
nuevo En esta conferencia, quiero proporcionar una demostración de nuestro
desafío para la aritmética de punteros y el uso del modificador constante.
Vamos a traer bloques de código. Voy a crear un nuevo proyecto. Vamos a nombrar este
ejemplo aritmético de un puntero.
Entonces, lo que vamos a hacer aquí
es determinar la longitud de una cadena usando aritmética de puntos.
Entonces, lo primero que quiero hacer es crear mi declaración de función.
Esto devolverá la longitud de la cadena. Así que tendrá int como
tipo de retorno. Lo llamaré longitud de cadena,
y esto solo tomará un puntero, pero será un puntero constante.
No queremos cambiar el valor de lo que apunta.
Eso significa que usaríamos la constante como la primera palabra clave, y
luego especificaríamos el tipo, que es un carácter.
Y diríamos estrella, y podemos nombrarlo como queramos, cadena.
Nuevamente, solo para reiterar, si hubiéramos puesto la constante aquí en su lugar, esto
diría que la dirección del puntero, el valor
del puntero no puede cambiar.
Pero, de nuevo, es algo redundante y realmente no es necesario
hacerlo porque estamos pasando por valor paso por copia.
De todos modos, tiene una copia de la dirección, por lo que no importa si la cambia allí.
Pero es importante cambiar lo que está señalando. Si no desea que cambie el
valor de lo que está señalando, definitivamente desea hacerlo constantemente aquí, y eso
es importante.
Así que ahora todo lo que tenemos que hacer es crear nuestro archivo principal.
crea nuestro main. Todo lo que vamos a hacer
en nuestro principal es llamar a string length,
una función de longitud de cadena con diferentes cadenas.
Así que imprimamos, y recuerde, devuelve un número entero para que podamos decir el porcentaje d y
solo imprimiremos la longitud de un par de cadenas que pasamos.
Así que vamos a llamar a la longitud de la
cadena, y solo vamos a pasar algunas cadenas constantes, por lo que podemos
poner las cosas entre comillas dobles aquí. Ni siquiera tenemos que crear punteros.
Puede crear un puntero y asignarlo y luego pasarlo, pero solo
debe asegurarse de que sea una constante.
Pero como es más fácil con menos código, podemos simplemente decir prueba de longitud de cadena.
Nuevamente, esa es una cadena literal constante.
Lo probaremos con algunos más.
Pondremos un espacio después. Agreguemos algunos avances de línea.
Aquí llamaremos longitud de cadena. Y de hecho, llamémoslo con la cadena vacía,
asegúrese de que giramos a cero. Y luego
el tercero, diremos longitud de la
cuerda, solo diremos Jason.
Ahora, por cierto, cuando crea estos y pasa estos enlaces de longitud
de cadena, automáticamente se les agrega el terminador nulo.
Aprendemos eso cuando declaramos punteros.
Ésa es una de las ventajas. Si va a crear un puntero y
será un literal, no desea especificar el tamaño.
Querría hacer algo como carácter si es una matriz porque una matriz
es una matriz es un puntero. Pero si no
quisiéramos especificar el tamaño, podríamos decir el
carácter p y luego dentro de aquí podríamos decir simplemente jason.
Recuerde esa lección en la que si no especificamos el tamaño de las matrices de
caracteres, automáticamente agregará un terminador nulo y creará el tamaño para usted.
De esa forma no cometerá ningún error. Si coloca el tamaño dentro de la
matriz, es posible que no tenga suficiente terminador nulo.
Es lo mismo cuando pasamos el literal a la longitud de la
cadena, el terminador nulo se agrega al final.
Entonces podríamos haber creado estas variables
inicialmente y hacer algo como esto y
luego pasar cada una.
Pero no quería perder el tiempo creando variables. Así que solo voy a hacer eso.
Ahora, lo que es realmente importante para este código es la función.
Entonces vamos a crear nuestra longitud de cadena. Recuerde nuevamente, devuelve un número entero
y será una constante. Así que podemos decir una cadena de estrellas de caracteres constante.
Y también observa que el nombre de la variable de declaración
de función no tiene por qué coincidir. Podría poner esto como cadenas y eso también está bien.
Ahora, dentro de esta función, tenemos que crear un puntero local porque el puntero local
apuntará al final de la cadena. Y luego, una vez que tenemos la dirección
del final de la cadena, podemos menos la dirección del comienzo de la cadena.
La dirección para el comienzo de la cadena es lo que se pasa.
La cadena apuntará automáticamente al primer elemento de la matriz o la
primera dirección de la matriz.
Entonces, si creamos un puntero local y
solo queremos volver a crear otra estrella de
caracteres constante y solo diremos la última dirección, ¿qué tal?
Y esto será igual a la dirección inicial de la cadena, y
luego la incrementaremos cada vez en nuestro ciclo.
Así que ahora tenemos la última dirección. Nuevamente, esta es una variable
local que almacenará la dirección justo antes del terminador nulo.
Entonces ahora podemos escribir nuestro ciclo while.
Y nuestro bucle while se cerrará cuando veamos el terminador nulo.
Ahora podríamos hacer esto de dos formas diferentes.
Podríamos comparar personajes. Entonces, podríamos decir algo como while
star last address porque tenemos que eliminar la referencia, no es
igual a la barra
invertida, cero podría hacer algo así, pero eso es
una especie de mucho código. Todo lo que realmente necesitamos hacer
es decir while
star en la última dirección. Porque si elimina la
referencia a un terminador nulo, será igual
a cero y cero es igual a falso.
Sabemos que los booleanos tienen uno es verdadero cero es falso.
Entonces, si es falso, saldrá a la luz. Así que todo lo que necesita
hacer es dentro de su condición while es poner una estrella en la última dirección.
Nuevamente, esto eliminará la referencia al puntero.
Y una vez que apunte a la última dirección, apuntará al terminador nulo.
Ahora tenemos que asegurarnos de modificar la última dirección, de modo que eventualmente apunte al terminador nulo.
Aquí todo lo que podemos hacer es decir más más la última dirección.
Entonces, cada iteración de este bucle while incrementará la dirección hasta que
vea un cero.
Un cero representa el terminador nulo.
Entonces, el resultado final de después de que se
termine de ejecutar el bucle while, la última dirección apuntará a la dirección del terminador nulo.
Luego podemos restar la dirección del terminador nulo de la
dirección que se pasó, nuestra cadena, y eso nos dará nuestra longitud.
Eso es todo lo que tenemos que hacer en la siguiente línea. Podemos simplemente decir que devuelva nuestra última
dirección y realmente queremos
menos la dirección, por lo que
no necesitamos quitar la referencia a nada o usar el operador de
indirección, la última dirección menos la cadena. Entonces, la cadena se pasa,
no la modificamos en absoluto.
Eso apunta al primer personaje. Eso estaría apuntando a j.
Esa sería la dirección o por primera vez llamamos en la línea ocho, esa sería la dirección de s.
La última dirección apuntará a la dirección de esta última t.
En realidad, uno más que eso, el terminador nulo. Si decimos última dirección menos
la dirección de s, nos dará la longitud.
Y eso es lo que vamos a devolver.
Así que espero que tenga sentido.
Nuevamente, en la línea 17, estamos creando una variable local
porque necesitamos realizar un seguimiento de la última dirección, la dirección
del terminador nulo.
Después de que termine de ejecutarse el ciclo while, la última dirección apuntará
después de t, el terminador nulo.
Entonces podemos simplemente restar la última dirección de la cadena, la dirección de
la cadena apunta a s cuando entra, no la modificamos.
Entonces, veamos qué pasa si esto nos devuelve la longitud correcta.
Cuando ejecutamos esto, deberíamos ver la longitud de esas cadenas que pasamos.
Entonces vemos 17 0 y 5.
Veamos 1 2 3 4 5 6 7 8 9 10
11 12 13, tienes que contar el espacio, 14
15 16 17. Así es, ponemos comillas
dobles que están vacías, por lo que debería ser cero y
luego Jason debería ser 5, entonces 17 0 y 5, eso es correcto.
Entonces, lo que hicimos aquí fue usar
aritmética de puntero para obtener la última dirección más el
operador de incremento, y luego apuntar
nuestra aritmética para obtener la longitud menos la última dirección menos la cadena.
Con buena pinta. Estoy tratando de demostrar el poder
de la aritmética puntual, la conveniencia de la notación.
Cómo puede incrementar, disminuir fácilmente para
llegar a varios puntos en una matriz
de caracteres y sacarlos. En este caso, solo obtenemos las direcciones y luego
usamos las direcciones para menos entre sí para obtener la longitud.
Así que espero que esto haya sido útil. Asegúrese de comprender todo lo que acabo de mencionar.
Nuevamente, el concepto de una constante, el concepto de más más, el concepto de
la condición si desreferencia una dirección y eso apunta
a un terminador nulo es un cero por lo que salta entonces, y luego
este concepto de menos dos direcciones. Gracias.