Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - geeke

#91
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.

#include <stdio.h>

int p(int n)
{
    int a[n];
    return (&a)[n] - a;
}

int main(void)
{
    printf("%d\n", p(8));
    return 0;
}


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

#92
Buenas, no estoy seguro si esto ya es conocido o no pero jugando con una implementación de strcmp descubrí que con solo comparar la dirección de inicio de dos cadenas se podía saber si eran iguales o no

Código (cpp) [Seleccionar]
#include <stdio.h>

int strcmp1(char *s, char *t)
{
    /*for(; *s==*t; s++, t++)
    {
        printf("s = %p, s = %c\n", s, *s);
        printf("t = %p, t = %c\n", t, *t);

        if(*s=='\0')
            return 0;
    }*/
    return s - t;
}

int main(void)
{
    if(strcmp1("hola", "hola") == 0)
        puts("Igual");
    else
        puts("Desigual");

    return 0;
}


Según veo con el depurador las direcciones de las cadenas son iguales sin ambas son iguales caso contrario son diferentes. Siendo sincero no entiendo porque pasa esto dos cadenas diferentes no deberían ocupar la misma dirección al mismo tiempo  :huh: ¿Alguien puede explicar que ocurre aquí?
#93
Navegando por internet me encontré un programa el cual no entiendo porque compila en mi caso en CodeBlock, como verán se define una función dentro de otra según tenia entendido esto es ilegal en C por lo cual esto me extraña mucho:

#include <stdio.h>

long fib(long x)
{
    long fib_i(long n)
    {
        return n < 2 ? n : fib_i(n - 2) + fib_i(n - 1);
    };
    if (x < 0)
    {
        printf("Bad argument: fib(%ld)\n", x);
        return -1;
    }
    return fib_i(x);
}

long fib_i(long n)
{
    printf("This is not the fib you are looking for\n");
    return -1;
}

int main()
{
    long x;
    for (x = -1; x < 4; x ++)
        printf("fib %ld = %ld\n", x, fib(x));

    printf("calling fib_i from outside fib:\n");
    fib_i(3);

    return 0;
}


Alguien puede explicar porque funciona esto y como funciona  :huh:
#94
Muchas gracias Blaster eres un genio  ;-)
#95
Cita de: rir3760 en 12 Enero 2015, 16:10 PM
¿Es una tarea?

No. Que te hace suponer que es una tarea? solo quise obtener información mas precisa sobre el tema en español ya que la poca información disponible al respecto en internet se encuentran en ingles :-(
#96
Esto es solo por curiosidad me preguntaba si existe una manera diferente que la convencional:

Código (cpp) [Seleccionar]
int n = sizeof(arr) / sizeof(arr[0]);

Para obtener el tamaño de un array de enteros he buscado mucho por internet pero nada al parecer es el único método existente.

Saludos ;D
#97
Buenas, soy nuevo en el foro y tengo dos dudas puntuales primero que nada si pueden darme la definición de:

¿Que es aliasing en c?
¿Que significa aliasing estricto en c?

Y si no es molestia ejemplos de situaciones en donde se nos puede presentar