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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Porque es posible llamar a una función puntero sin usar "*" ?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Porque es posible llamar a una función puntero sin usar "*" ?  (Leído 2,454 veces)
patilanz


Desconectado Desconectado

Mensajes: 481

555-555-0199@example.com


Ver Perfil WWW
Porque es posible llamar a una función puntero sin usar "*" ?
« en: 8 Julio 2015, 15:06 pm »

Hola,
teniendo esto:
Código
  1. typedef bool (_funct)(char* buffer,int maxLength);
  2. _funct * funct = (_funct*)GetProcAddress(library, "funct");
  3. //Porque es posible llamar a un puntero funcion de esta manera? :
  4. funct(..);
  5. //Me parece mas logico asi:
  6. (*funct)(..);
  7.  

Saludos


En línea

BloodSharp


Desconectado Desconectado

Mensajes: 813


¡ Hiperfoco !


Ver Perfil WWW
Re: Porque es posible llamar a una función puntero sin usar "*" ?
« Respuesta #1 en: 8 Julio 2015, 16:50 pm »

Hola,
teniendo esto:
Código
  1. typedef bool (_funct)(char* buffer,int maxLength);
  2. _funct * funct = (_funct*)GetProcAddress(library, "funct");
  3. //Porque es posible llamar a un puntero funcion de esta manera? :
  4. funct(..);
  5. //Me parece mas logico asi:
  6. (*funct)(..);
  7.  

Saludos

Teniendo en cuenta que funct es un puntero, el compilador comprende que en assembler seria algo equivalente a lo siguiente:
Código
  1. push "funct";
  2. push library;
  3. call GetProcAdress;
  4. mov funct,eax;
  5. push maxLength;
  6. push buffer;
  7. call [funct];
  8. add esp,8;


B#


« Última modificación: 8 Julio 2015, 16:54 pm por BloodSharp » En línea



ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Porque es posible llamar a una función puntero sin usar "*" ?
« Respuesta #2 en: 8 Julio 2015, 16:56 pm »

Por parte de C, () lo interpreta <que yo sepa> igual en ambos casos. No te lo tomes como un fallo, sino como una ayuda al hacer funciones de callback, pues te ayuda a evitar andar poniendo (*)
En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Porque es posible llamar a una función puntero sin usar "*" ?
« Respuesta #3 en: 9 Julio 2015, 05:15 am »

Definiendo el tipo es lo mismo que haciendo un casting directo a la hora de usar una variable de algun tipo:

Código:
int var;
((void(__stdcall*)(int, int))var)(...);
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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