Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Variável global e variável estatica

  1. Amigos, tudo bem?

Vocês podem me explicar e exemplificar a diferença entre variável global e variável estática?

Obrigado

5 respostas

Olá, Rodrigo!

Vou te explicar a diferença entre variável global e variável estática e também vou te dar alguns exemplos para facilitar o entendimento.

Uma variável global é declarada fora de qualquer função e pode ser acessada por qualquer parte do programa. Ela tem um escopo global, o que significa que pode ser utilizada por todas as funções do programa. Por exemplo:

int contador = 0; // variável global

void funcao1() {
  contador++; // acessando a variável global
}

void funcao2() {
  contador++; // acessando a variável global
}

int main() {
  funcao1();
  funcao2();
  printf("O valor do contador é: %d\n", contador); // imprime 2
  return 0;
}

Já uma variável estática é declarada dentro de uma função, mas mantém seu valor entre as chamadas da função. Ela tem um escopo local, ou seja, só pode ser acessada dentro da função onde foi declarada. Por exemplo:

void funcao() {
  static int contador = 0; // variável estática
  contador++;
  printf("O valor do contador é: %d\n", contador);
}

int main() {
  funcao(); // imprime 1
  funcao(); // imprime 2
  funcao(); // imprime 3
  return 0;
}

Perceba que a variável estática mantém o seu valor entre as chamadas da função, enquanto a variável global pode ser acessada e modificada por qualquer parte do programa.

Espero ter ajudado e bons estudos!

Lucas, bom dia! tudo bem?

Quando você diz que a variável estatica mantem o seu valor, quer dizer se ela for declarada =0(zero) ela sempre permanecerá zero? Quando você diz que a variável global ela pode ser modificada é que ela é alterada dentro da função? Me dê um exemplo, por favor.

solução!

Oi, Rodrigo!

Sim, quando digo que uma variável estática mantém seu valor, estou me referindo ao fato de que ela mantém seu valor entre chamadas de função. Se você inicializa uma variável estática com um valor específico, esse valor será retido e atualizado conforme necessário ao longo das chamadas subsequentes da função.

Por outro lado, uma variável global é aquela que é declarada fora de qualquer função e pode ser acessada por todas as funções no escopo do programa. Uma variável global pode ser modificada tanto dentro de uma função quanto em qualquer outra parte do código que tenha acesso a ela.

Aqui está um exemplo para ilustrar as diferenças:

Exemplo de variável estática:

#include <stdio.h>

void count_calls() {
    static int counter = 0; // Variável estática, inicializada apenas na primeira chamada
    counter++;
    printf("Número de chamadas: %d\n", counter);
}

int main() {
    count_calls(); // Saída: Número de chamadas: 1
    count_calls(); // Saída: Número de chamadas: 2
    count_calls(); // Saída: Número de chamadas: 3
    return 0;
}

Neste exemplo, a variável counter é uma variável estática na função count_calls(). Ela é inicializada apenas uma vez, na primeira chamada da função, e, em seguida, mantém seu valor entre chamadas subsequentes.

Exemplo de variável global:

#include <stdio.h>

int global_variable = 0; // Variável global, inicializada com zero

void modify_global() {
    global_variable += 10; // Modificando o valor da variável global na função
}

int main() {
    printf("Valor inicial: %d\n", global_variable); // Saída: Valor inicial: 0
    modify_global();
    printf("Valor modificado: %d\n", global_variable); // Saída: Valor modificado: 10
    modify_global();
    printf("Valor modificado novamente: %d\n", global_variable); // Saída: Valor modificado novamente: 20
    return 0;
}

A variável global_variable é uma variável global e pode ser acessada e modificada em qualquer função. No exemplo, a função modify_global() altera o valor da variável global adicionando 10 ao seu valor inicial de zero. Cada chamada subsequente da função modify_global() modifica a variável global, e o valor é retido entre chamadas.

Ou seja na variável estática tem 3 chamadas e todas elas retornam valor zero?

Exatamente! Ela mantém seu valor entre chamadas subsequentes.