Ponteiros para funções em c ++

Quando um aplicativo estiver em execução, as funções na aplicação existir na memória-assim como qualquer outra coisa na memória, eles têm um endereço. E ter um endereço é bom, porque dessa forma, as pessoas podem encontrá-lo.

Você pode obter o endereço de uma função, levando o nome dele e colocar o endereço-de operador (&) Na frente do nome da função, assim:

address = &MyFunction-

Mas para fazer este trabalho, você precisa saber que tipo de declarar endereço. o endereço variável é um ponteiro para uma função, e a maneira mais limpa para atribuir um tipo é a utilização de um typedef. (Felizmente, este é um momento em que a maioria das pessoas estão dispostas a usar um typedef.)

Aqui está o typedef, Acredite ou não:

int typedef (* FunctionPtr) (int) -

É difícil de seguir, mas o nome do novo tipo é FunctionPtr. Isto define um tipo chamado FunctionPtr que retorna um número inteiro (o mais à esquerda int) E leva um número inteiro como um parâmetro (a mais à direita int, que deve ser entre parênteses).

A parte do meio desta declaração é o nome do novo tipo, e você deve precedê-lo por um asterisco, o que significa que é um ponteiro para todo o resto da expressão. Além disso, você deve colocar o nome do tipo e sua asterisco anterior entre parênteses.

E então você está pronto para declarar algumas variáveis! Aqui vai:



endereço FunctionPtr = &MyFunction-

Esta linha declara endereço como um ponteiro para uma função e inicializa a MinhaFunção (). Agora, para que isso funcione, o código para MinhaFunção () devem ter o mesmo protótipo declarado na typedef: Neste caso, deve tomar um inteiro como um parâmetro e retornar um inteiro.

Assim, por exemplo, você pode ter uma função como esta:

int TheSecretNumber (int x) {return x + 1-}

Então você pode ter um a Principal() que armazena o endereço desta função em uma variável - e, em seguida, chama a função usando a variável:

Video: Ponteiros para funções em C

int principal (int argc, char * argv []) {int typedef (* FunctionPtr) (int) endereço -int MyPasscode = 20 = FunctionPtr &TheSecretNumber-cout lt; lt; endereço (MyPasscode) lt; lt; endl-}

Agora, só assim você pode dizer que você já viu isso, aqui está o que a endereço declaração seria semelhante sem usando um typedef:

int (* endereço) (int) = &TheSecretNumber-

A oferta deve ser que você tem duas coisas em lado parênteses a lado, eo conjunto da direita tem apenas tipos dentro dela. O da esquerda tem um nome de variável. Portanto, esta linha não está declarando um de tipo em vez disso, ele está declarando uma variável.


Publicações relacionadas