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

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda direcciones de memoria C
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: 1 2 [3] Ir Abajo Respuesta Imprimir
Autor Tema: Duda direcciones de memoria C  (Leído 9,172 veces)
0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Duda direcciones de memoria C
« Respuesta #20 en: 18 Julio 2013, 17:17 pm »

Vale, entonces te pasa lo mismo que a mi compilando con msvc

Eso parece  :P


En línea

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


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: Duda direcciones de memoria C
« Respuesta #21 en: 18 Julio 2013, 17:31 pm »

Y a mi me pasaba lo mismo.


En línea

dRak0

Desconectado Desconectado

Mensajes: 234


Ver Perfil WWW
Re: Duda direcciones de memoria C
« Respuesta #22 en: 18 Julio 2013, 23:47 pm »

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

Código:
#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).
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Duda direcciones de memoria C
« Respuesta #23 en: 19 Julio 2013, 16:38 pm »

A ver que no me entero de una, entonces si hacemos esto:

Código
  1. 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í:
Código:
int
*ptr1
ptr2
ptr3
Resultando en la declaración de tres variables donde solo la primera es un puntero.

----

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).
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:
Código
  1. for (i = 0; i < 3; i++){
  2.   f[i](i);
  3.   printf("La direccion en memoria es %p\n", (void *) f[i]);
  4. }

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 2 [3] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines