Como devo usar matriz de ponteiros de função em C?
Como posso inicializá-los?
c
initialization
function-pointers
O cara com o chapéu
fonte
fonte
(*p[4]) (int, int) {sum,substract,mul,div}
As respostas acima podem ajudá-lo, mas você também pode querer saber como usar a matriz de ponteiros de função.
Você só pode atribuir os endereços de funções com o mesmo tipo de retorno e os mesmos tipos de argumento e sem argumentos a uma única matriz de ponteiro de função.
Você também pode passar argumentos como abaixo se todas as funções acima estiverem tendo o mesmo número de argumentos do mesmo tipo.
Nota: aqui na matriz a numeração dos ponteiros de função começará a partir de 0 mesmo que em matrizes gerais. Portanto, no exemplo acima,
fun1
pode ser chamado se opção = 0,fun2
pode ser chamado se opção = 1 efun3
pode ser chamado se opção = 2.fonte
(*func_ptr[3])
para(*func_ptr[3])()
e vai compiladoVeja como você pode usá-lo:
New_Fun.h
New_Fun.c
Main.c
Espero que isso ajude na compreensão
Function Pointer.
fonte
f1, f2 ...
e no lugar de seguida, digite 'writefile, ReadFromFile ...'... torna-se mais redableEssa "resposta" é mais um adendo à resposta do VonC; apenas observando que a sintaxe pode ser simplificada por meio de um typedef e a inicialização agregada pode ser usada:
fonte
Oh, existem muitos exemplos. Basta dar uma olhada em qualquer coisa no glib ou no gtk. Você pode ver o trabalho dos ponteiros de função trabalhando lá o tempo todo.
Aqui, por exemplo, a inicialização do material gtk_button.
E em gtkobject.h você encontra as seguintes declarações:
O material (* set_arg) é um ponteiro para funcionar e isso pode, por exemplo, ser atribuído a outra implementação em alguma classe derivada.
Muitas vezes você vê algo assim
Assim, você pode acessar a tabela pelo nome e chamar a função "associada".
Ou talvez você use uma tabela de hash na qual coloca a função e a chama "pelo nome".
Atenciosamente
Friedrich
fonte
Pode usá-lo da seguinte maneira:
fonte
Este deve ser um exemplo curto e simples de copiar e colar partes do código das respostas acima. Espero que isso ajude.
fonte
A solução mais simples é fornecer o endereço do vetor final desejado e modificá-lo dentro da função.
fonte
Esta pergunta já foi respondida com muito bons exemplos. O único exemplo que pode estar faltando é aquele em que as funções retornam ponteiros. Escrevi outro exemplo com isso e adicionei muitos comentários, caso alguém ache útil:
fonte
Este exemplo simples para array multidimensional com ponteiros de função ":
fonte