Hola y bienvenido de nuevo. Tenemos otro desafío para ti.
En este desafío, quiero que aprenda todo sobre la aritmética de punteros.
Recuerde, la aritmética de punteros es un concepto muy bueno.
Es un concepto de notación.
Pero realmente ilustra cómo se relacionan las
matrices con los punteros. Puede atravesar una matriz muy fácilmente
con una sintaxis muy simple que reduce su línea de código y es
un concepto realmente ordenado.
Entonces, aprenderá todo sobre la aritmética de punteros.
También aprenderemos más sobre el modificador constante.
Entonces, en este desafío, quiero que escriba un programa
que pruebe su comprensión de la aritmética de punteros y el modificador const.
Hemos aprendido sobre estos dos conceptos en conferencias anteriores.
Entonces quiero que escribas una función que calcule la longitud de la cadena.
Los requisitos son que la función debe tomar como parámetro un puntero de carácter constante.
Un puntero char constante significa que no puede cambiar el valor de lo que
apunta el puntero, y no va
a hacer eso con la longitud.
La función solo puede determinar la longitud de la cadena usando aritmética de puntero.
No quiero que uses la función str length. Quiero que uses aritmética de punteros.
Y la forma en que estoy imaginando que se implemente
esta función es que obtendrás la dirección del final del puntero.
Esa sería la longitud del puntero esencialmente.
Pero la forma en que puede obtener la dirección de la última cadena y el puntero es que
puede escribir un bucle while.
El bucle while puede llegar hasta el carácter de terminador nulo.
O el carácter terminador nulo, recuerde, que
se representa como int.
Entonces, el terminador nulo es en realidad un cero. Por lo tanto, podría escribir
un bucle while y todo el bucle while que debe incluir
en su condición es desreferenciar el puntero.
Porque si el valor del puntero de referencia d es cero, salta del bucle
y ese sería el terminador nulo.
Así que quiero que repase todo
el puntero.
Y mientras lo
revisa, siga aumentando ese puntero.
Entonces ahora tiene un puntero que apunta al final de la cadena.
Luego, para calcular realmente la longitud, todo lo que tienes
que hacer es menos dos punteros.
El puntero que se pasó que es el comienzo
de la cadena y luego el
puntero que creó en la función que apunta al final de la cadena.
Si menos el final del puntero de la cadena desde el principio
del punto de la cadena, tendrá la longitud de la cadena.
Entonces, estará haciendo aritmética de punteros incrementando el
puntero uno por uno para llegar a la dirección final y
luego usará aritmética de puntos para restar cada puntero.
Esta es probablemente la forma más válida de usar la aritmética
de puntos para la resta. Por lo general, no agrega dos
punteros porque ¿por qué agregaría dos direcciones?
Puede restar dos direcciones para saber qué tan lejos están dos elementos en
una matriz, eso tendría
sentido, pero sumar no lo hará. Entonces, solo para reiterar, la función solo
puede determinar la longitud de la cadena usando aritmética de puntos.
Cree un puntero local en su
función, incremente ese puntero cada vez para llegar al final hasta
que vea un terminador nulo, un simple bucle while.
Y luego, una vez que tenga la dirección final, ya tiene
la dirección inicial, reste esos dos punteros que le darán la longitud.
Debe devolver esa longitud como un int de la función.
Y luego puede imprimir la longitud real.
Entonces, esta asignación lo está familiarizando con la aritmética de puntos
y también con cómo usar el modificador constante porque no desea cambiar el
valor real al que apunta y
restar dos punteros también y también usar un bucle while donde puede
mirar el valor del puntero en sí mismo para
determinar el carácter nulo. Buena suerte.
Daré una solución en la próxima conferencia. Gracias.