Ir para conteúdo
Fórum Script Brasil
  • 0

Pseudo-Passar por referência em C


PedroCunha

Pergunta

Olá gente. Tenho uma dúvida quanto a esse código aqui:

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

float Numero,Maior_Numero;
int i;

void Determinar_Maior_Numero(float, float, int);

void Determinar_Maior_Numero(float Numero, float Maior_Numero, int i)
{
    Maior_Numero = 0;

    for (i = 0; i < 10; i++)
    {
        printf("Digite um numero\n");
        scanf("%f", &Numero);
        if (Numero > Maior_Numero)
        Maior_Numero = Numero;
    }


}

int main()
{

    Determinar_Maior_Numero(Numero,Maior_Numero,i);

    printf("\n\nO maior numero digitado foi: %.5f\n\n", Maior_Numero);

    printf("Pressione qualquer tecla para sair");
    getch();
    return 0;
}

Se eu tentar usar o printf com Maior_Numero na função main, ou seja, fora de onde ele foi alterado, ele não "carrega" nenhum valor, mostrando zero na tela. Em C++, para que eu conseguisse mostrar o valor da variável Maior_Numero eu passaria ele como referência nos parâmetros da função, no entanto, em C, passar por referência não é possível.

Gostaria de saber se existe alguma alternativa.

Att.,

Pedro

²Também gostaria de saber se é possível 'chamar' uma função em main sem declarar as variáveis que compõem os seus parâmetros de forma global.

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Você pode usar ponteiros, estude-os bastante pois é o grande trunfo de C, eu vou passar uma abstração desse assunto sem teorias grande, busque um livro ótimo.

podemos usar ponteiros se precisarmos de alterar uma variavel fora do escopo, mas antes temos:

int *p; //na declaração o * serve para indicar que aquela variavel é um endereço

int i;

p = &i; //o caractere & retorna o valor do endereço fisico na memória RAM, dizendo assim que o ponteiro aponta para o endereço i

*p = 9; //usado depois da declaração o * acessa o valor da variavel apontada podendo assim altera-la

//Por cópia, é errado e nada se altera
void trocar(int x, int y)
{
    int aux; //variavel auxiliar
    aux = x;
    x = y;
    y = aux;
}

//Por referencia
void trocar(int *x, int *y)
{
    int aux; //variavel auxiliar
    aux = *x;
    *x = *y;
    *y = aux;
}

//chamando asfunções em main

main
...
//por cópia

troca(a,b);

//por referencia
troca(&a,&b);//usa sempre o & para indicar que se passa um endereço e a variável vai ser alterada, casos como scanf, printf usa-se essa notação

Vetores e strings(vetores de caracteres) são passados automaticamente por referencia.

Qualquer dúvida, ou uma explicação bem mais detalhada à disposição

Link para o comentário
Compartilhar em outros sites

  • 0

Pedro, quando se usa ponteiros e você passa um endereço das variáveis em uma função, não importa onde esteja elas serão alteradas sendo globais ou locais.

uma teoria no que acontece.

supondo que no programa acima:

a =2;

b =1;

&a = 1002; //o endereço de a na memória

&b = 1004;

&x = 2012;

&y = 2014;

Quando você passa por cópia acontece isso:

//trocar(a, B);

x = a; // x = 2

y = b;// y = 1

eles trocam os valores de x e y que são destruidos depois da função

Quando você passa por referencia acontece isso:

//trocar(a, B);

x = &a; // x = 1002 e *x = 2

y = &b;// y = 1004 e *y = 1

Qual a diferença? No segundo caso com ponteiros a função muda o valor que está na memória passada por referencia isso indica que qualquer parametro passado vai ser utilizado como se fosse ele mesmo independente que seja local ou global.

Link para o comentário
Compartilhar em outros sites

  • 0

Certo. Mas mesmo assim eu não posso fazer o seguinte certo?

....

void Testando(int Teste)
{

 Teste = 0;
}

int main()

{

  .....


  Testando(Teste);
  return 0;

}

Certo?

Link para o comentário
Compartilhar em outros sites

  • 0

o que acontece você cria uma variavel x local em main()

Você chama Testando(x)

Na verdade o programa cria uma variavel Teste local em Testando() com o mesmo valor de x

No final Teste ganha o valor = 0 e é destruida no final da função

Trocamos o valor de x? Não. então não serve pra nada essa função se não usarmos ponteiro.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...