¿Matrices de punteros a funciones en C?

Iniciado por blackshack_zero, 29 Agosto 2015, 01:50 AM

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

blackshack_zero

Hola compañeros.
Quiero saber si es posible crear matrices bidimensionales de punteros a funciones en C.
Muchas gracias.  ;D

snake_linux

Cita de: blackshack_zero en 29 Agosto 2015, 01:50 AM
Hola compañeros.
Quiero saber si es posible crear matrices bidimensionales de punteros a funciones en C.
Muchas gracias.  ;D

Querrás decir si a una función le puedes pasar una matriz creada con punteros, es decir, dinámica, si es así te pongo un ejemplo:


#include <stdio.h>
#include <stdlib.h>

void funcion(int **);

int main() {

int **mi_matriz;
mi_matriz=(int **)malloc(sizeof(int *)*10);

int x;
for(x=0;x<10;x++)  mi_matriz[x]=(int *)malloc(sizeof(int)*10);

mi_matriz[3][4]=5;

funcion(mi_matriz);

return 0;
}

void funcion(int ** matriz) {
   
    printf("El numero es %d\n", matriz[3][4]);
   
   
}


Espero haberte sido de ayuda.

Saludos.

xiruko

Cita de: blackshack_zero en 29 Agosto 2015, 01:50 AM
Hola compañeros.
Quiero saber si es posible crear matrices bidimensionales de punteros a funciones en C.
Muchas gracias.  ;D

Hola, pues la idea es la misma que cuando haces un arreglo de punteros a funciones, solo que le añades una dimensión más. Mira este ejemplo tonto:

#include <stdio.h>

void f1(void);
void f2(void);
void f3(void);
void f4(void);

int main()
{
void (*funcPtr[2][2])(void);
funcPtr[0][0] = &f1;
funcPtr[0][1] = &f2;
funcPtr[1][0] = &f3;
funcPtr[1][1] = &f4;

(*funcPtr[0][0])();
(*funcPtr[0][1])();
(*funcPtr[1][0])();
(*funcPtr[1][1])();

return 0;
}

void f1(void) { printf("Llamada a f1\n"); }
void f2(void) { printf("Llamada a f2\n"); }
void f3(void) { printf("Llamada a f3\n"); }
void f4(void) { printf("Llamada a f4\n"); }


Donde la salida será:

Llamada a f1
Llamada a f2
Llamada a f3
Llamada a f4


Saludos!

ivancea96

Ten en cuenta que una matriz o un array guardan cualquier tipo de elemento o variable, y más aun si es un puntero, puesto que no es más que una dirección, que a nivel práctico es un valor entero.