Branza 0 Denunciar post Postado Junho 13, 2007 Já vi em diversos códigos o uso de funções declaradas como pointers, por exemplo function *exemplo(int n){} Mas qual a finalidade desse tipo de função? Grato http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
IgniSpider 0 Denunciar post Postado Junho 16, 2007 Quando você declara: tipo funcao(tipo variaveis){} a função retorna uma cópia do valor retornado. Ex.: int soma(int a,int b ){int c; c=a+b; return c; // A função retorna uma cópia de c.} Já se você declara: int *soma(int a,int b ); a função retorna o endereço de memória da variável 'int c', ou seja, as alterações que forem feitas com o valor está sendo feito direto na variável 'int c'. Outra coisa, não da pra retornar uma cópia de uma matriz, estrutura ou união, ou seja, você tem que retornar o endereço de memória delas. A função abaixo não compilaria: struct Nome_da_Estrutura funcao(variaveis); ou union Nome_da_Uniao funcao(variavis); Você teria que retornar o endereço delas: struct Nome_da_Estrutura *funcao(variaveis); ou union Nome_da_uniao *funcao(variaveis); Espero q tenhas entendido... Compartilhar este post Link para o post Compartilhar em outros sites
gRoOvE 0 Denunciar post Postado Agosto 18, 2008 a função retorna o endereço de memória da variável 'int c', ou seja, as alterações que forem feitas com o valor está sendo feito direto na variável 'int c'. e qual a utilidade disso, já que você vai poder apenas alterar o conteúdo da variável 'int c', que está dentro de uma função? Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Agosto 18, 2008 Já vi em diversos códigos o uso de funções declaradas como pointers, por exemplofunction *exemplo(int n){ } Isso não é ponteiro p/ função. e qual a utilidade disso, já que você vai poder apenas alterar o conteúdo da variável 'int c', que está dentro de uma função? Isso não é bem verdade... 'c' é só um nome user-friendly p/ um local em memória. O gcc exibe um warning,mas posso alterar o conteúdo do endereco retornado normalmente. A variável ser local não quer dizer que eu não possa alterar o conteúdo do endereço onde ela foi alocada, só quer dizer que ela saiu da pilha da função quando você retornou da chamada de procedimento. #include <stdio.h> int * soma (int a,int b) { int c = a+b; printf("%x = %d\n",&c,c); return &c; } int main() { int * p = soma(1,2); printf ("MAIN: %p = %d\n",p,*p); *p = -10; printf("MAIN: %p = %d\n",p,*p); } /isis@linux-0khy:~/src> ./a.out bfeda6e4 = 3 MAIN: 0xbfeda6e4 = 3 MAIN:0xbfeda6e4 = -10 Compartilhar este post Link para o post Compartilhar em outros sites