Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Branza

Function Pointer

Recommended Posts

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

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
Já vi em diversos códigos o uso de funções declaradas como pointers, por exemplo

function *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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.