Duda direcciones de memoria C

Iniciado por dRak0, 18 Julio 2013, 15:46 PM

0 Miembros y 1 Visitante están viendo este tema.

0xDani

Cita de: eferion en 18 Julio 2013, 17:11 PM
Vale, entonces te pasa lo mismo que a mi compilando con msvc

Eso parece  :P
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

Caster


dRak0

Aprovecho el tema q habia iniciado para hacer otra pregunta.
Tengo lo siguiente


#include <stdio.h>

void funcion1(int);
void funcion2(int);
void funcion3(int);

main()
{
int i;
void (*f[3])(int)={funcion1,funcion2,funcion3};
for(i=0;i<3;i++)
{
(*f[i])(i);
printf(".Direccion en memoria de la funcion:%p",f[i]);
}
}

void funcion1(int a)
{
printf("\nEntro a la funcion 1");
}
void funcion2(int a)
{
printf("\nEntro a la funcion 2");
}
void funcion3(int a)
{
printf("\nEntro a la funcion 3");
}


Queria saber si esta bien lo q afirmo. Es decir , si esta bien de que son las direcciones de memoria de las funciones y no del array. (Supuse que estan bien porque no son consecutivas , pero por las  dudas pregunto).

rir3760

Cita de: Caster en 18 Julio 2013, 16:43 PMA ver que no me entero de una, entonces si hacemos esto:

int* ptr1,ptr2,ptr3;

El unico puntero que hay aqui es ptr1, no?
Correcto. El estándar de C define al lenguaje como uno de formato libre donde el espacio blanco (espacio, tabulador, etc.) solo es significativo en tres casos:
1) Directivas del preprocesador.
2) Cadenas literales.
3) Cuando este indica el final de un token (la unidad mínima que reconoce el lenguaje). Por ejemplo el espacio en "int i;" es significativo mientras que en "int * i;" no lo es (esta ultima se puede separar sin ambigüedades en los tokens 'int', '*', 'i' y ';').

En el ejemplo que mencionas si eliminamos el espacio, los separadores (las comas) y el indicador de fin de sentencia (el punto y coma) los tokens se agrupan así:
int
*ptr1
ptr2
ptr3

Resultando en la declaración de tres variables donde solo la primera es un puntero.

----

Cita de: jednak en 18 Julio 2013, 23:47 PMQueria saber si esta bien lo q afirmo. Es decir , si esta bien de que son las direcciones de memoria de las funciones y no del array. (Supuse que estan bien porque no son consecutivas , pero por las  dudas pregunto).
Es correcto, solo un comentario: en el bucle no necesitas aplicar indireccion en la llamada a función y, siendo pesados, no es posible imprimir (de forma portable) la dirección de una función.

La mejor forma en el caso del bucle es:
for (i = 0; i < 3; i++){
   f[i](i);
   printf("La direccion en memoria es %p\n", (void *) f[i]);
}


Un saludo
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