elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Calcula el cuadrado de un numero usando aritmetica de punteros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Calcula el cuadrado de un numero usando aritmetica de punteros  (Leído 2,741 veces)
geeke

Desconectado Desconectado

Mensajes: 93


Ver Perfil
Calcula el cuadrado de un numero usando aritmetica de punteros
« en: 29 Marzo 2015, 19:29 pm »

He encontrado una función algo peculiar la cual calcula el cuadrado de un determinado numero, hasta ahi todo bien pero lo que me llama la atención es el metodo utilizado para llegar a ello.

Código
  1. #include <stdio.h>
  2.  
  3. int p(int n)
  4. {
  5.    int a[n];
  6.    return (&a)[n] - a;
  7. }
  8.  
  9. int main(void)
  10. {
  11.    printf("%d\n", p(8));
  12.    return 0;
  13. }

Como se daran cuenta a simple vista uno no supondría que esto saca el cuadrado de un numero es algo confuso y pido que alguien me explique detalladamente como funciona esto



En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Calcula el cuadrado de un numero usando aritmetica de punteros
« Respuesta #1 en: 29 Marzo 2015, 22:15 pm »

http://stackoverflow.com/questions/27828822/cant-understand-this-way-to-calculate-the-square-of-a-number

De cualquier modo, es puramente curioso. usa n*n xD


« Última modificación: 29 Marzo 2015, 22:20 pm por ivancea96 » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Calcula el cuadrado de un numero usando aritmetica de punteros
« Respuesta #2 en: 30 Marzo 2015, 04:28 am »

He encontrado una función algo peculiar la cual calcula el cuadrado de un determinado numero, hasta ahi todo bien
El problema con esa forma de obtener el cuadrado es que tal vez funcione o tal vez no ya que la expresión genera UB (comportamiento no definido), la explicación en detalle se encuentra en el vinculo cortesía de ivancea96.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
geeke

Desconectado Desconectado

Mensajes: 93


Ver Perfil
Re: Calcula el cuadrado de un numero usando aritmetica de punteros
« Respuesta #3 en: 30 Marzo 2015, 18:44 pm »

ivancea96 gracias por el enlace lo acabo de leer y en el mismo mencionan que

Código
  1. (&a)[n] -a

Es equivalente a

Código
  1. (a + sizeof(a[n])*n -a) / sizeof(int)

Lo cual no entiendo porque, si me explican como va esto
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Calcula el cuadrado de un numero usando aritmetica de punteros
« Respuesta #4 en: 2 Abril 2015, 05:03 am »

Código
  1. (a + sizeof(a[n])*n -a) / sizeof(int)
Por partes:

1) Ya que "a" se suma y luego se resta la quitamos de la expresión, queda "(sizeof(a[n]) * n) / sizeof(int)".
2) "sizeof(a[n])" es el numero de bytes necesarios para almacenar el array de tipo "int [n]".
3) Multiplicado por "n" es el numero de bytes necesario para almacenar "n" arrays de tipo "int [n]".
4) Para quitar al tipo int de la ecuación se divide por "sizeof(int)", con lo que terminamos con solo la multiplicación "n * n".

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
pasar float con array usando punteros - help
Programación C/C++
Micah Genji 8 5,869 Último mensaje 30 Mayo 2010, 02:42 am
por .:BlackCoder:.
Programa que calcula el número más próximo al primero « 1 2 3 »
Programación C/C++
DickGumshoe 22 22,463 Último mensaje 29 Enero 2019, 10:07 am
por dijsktra
Diferencia entre usar aritmetica de punteros y corchetes en vectores en C
Programación C/C++
xoker 4 3,338 Último mensaje 26 Diciembre 2013, 13:27 pm
por ivancea96
ayuda con aritmetica de punteros
Programación C/C++
leo soto 2 2,716 Último mensaje 17 Marzo 2017, 19:21 pm
por MAFUS
Problemas con programa k calcula factorial del numero
PHP
elbrujo20 1 2,411 Último mensaje 29 Septiembre 2017, 22:39 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines