Valor da variavel muda na função principal

Pessoal, nao estou conseguindo responder a essa questao, poderiam me ajudar por favor, muito obrigado pela atencao

O valor de x na função param do Código 3 foi alterado, explique porque este
valor foi alterado na função principal.

#include<stdio.h>
#include<stdlib.h>
int x;
int param( ){
x = x + 10;
return x;
}
int main(){
int y;
printf(“Digite um numero: “);
scanf(” %d”, &x);
y = param();
printf("\nO valor de y e %d \n", y);
printf("\nO valor de x e %d \n", x);
system(“pause”);
}

Uma dica, você deve formatar o código:


Porque x é uma variável global, logo ela pode ser usada e alterada por toda parte do programa. Diferente da variável y que foi declarada dentro da função main e que só pode ser usada na mesma, ou seja, ela possuí um escopo limitado. Nessa ocasião, y é uma variável local.

Opa Jelson, obrigado pela resposta, então a variável global se caracteriza por estar acima da funcao principal, certo? Quando coloco uma variável pra receber o parâmetro, por exemplo, na função principal quando eu declaro a função int param(x), e aí eu chamo a função e coloco o parâmetro (int x) na função int param(int x), o x não muda o valor na função principal, por que acontece isso? Agora quando eu deixo a função vazia, sem receber parâmetro, tipo int param(), a variável x vira global, não entendi isso… poderia me explicar? Obrigado!

Eu não diria acima da função principal, mas sim, aquela variável que não tem seu escopo limitado, ou seja, ela pode ser acessada por outros métodos, funções, etc.

No exemplo abaixo a variável y tem seu escopo limitado, ela só existe dentro da função teste(). Logo ela é uma variável local.

void teste() {
    int y = 10;
}

Falo isso, porque em outras linguagens você pode criar variáveis globais depois da função principal, ou até mesmo durante o programa.


Você tá falando assim:

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

int x;

int param(int x){
    x = x + 10;
    return x;
}

int main(){
    int y;
    
    printf("Digite um numero: ");
    scanf(" %d", &x);
    
    y = param(x);
    
    printf("\nO valor de y e %d \n", y);
    printf("\nO valor de x e %d \n", x);
    
    system("pause");
}

Nesse caso o x é um parâmetro para a função param(int x), que não deixa de ser uma variável local dessa função. E quando você declarar uma variável local com o mesmo nome que a variável global a função dará preferência a variável local.

É por isso que o valor da variável x (global) permanece inalterada.


Se quiser saber mais tem esse artigos aqui:
https://www.pucsp.br/~so-comp/cursoc/aulas/c760.html#:~:text=Quando%20uma%20função%20tem%20uma,%3B%20func1%20(...)