ProPixel

Participe do fórum, é rápido e fácil

ProPixel
ProPixel
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Ir para baixo
covital
covital
Membro VIP

<b>Idade</b> Idade : 27
<b>Posts</b> Posts : 2107
<b>Créditos</b> Créditos : 0
<b>Respeito</b> Respeito : 18
God damn asshole
Variáveis Globais e Locais

Agora que aprendemos como criar funções, uma nova concepção deve estar em mente: A diferença entre variáveis globais e locais.
Variáveis locais

Variáveis locais são aquelas nas quais apenas a função onde ela está pode usá-la. Por exemplo, se declaramos int x dentro da função main, apenas a função main poderá utilizá-la para guardar dados e nenhuma outra função poderá utilizar o int x da função main. Veja:

#include <iostream>
#include <cstdlib>
using namespace std;
int obterY (void) //criando a função
**
int y; //apenas a função obterY pode utilizar
y=10*5;
return y;
**
int main (void)**
int valorDeY, x; // apenas a função MAIN pode utilizar
cout <<"digite o valor de X: "*
cin >> x;
cin.ignore ()*
valorDeY=obterY()*
cout <<"\nX="<<x<<"\tY="<<valorDeY<<"\n\n"*
system ("pause")*
**

Perceba que a variável x só pode ser utilizado por main e a variável y só pode ser utilizada por obterY. Para conseguirmos utilizar o valor guardado em y na função obterY, tivemos que retornar (por na saída da função) o valor de y (return y) e guardamos dentro de outra variável que estava em main - valorDeY.

Variáveis globais

As variáveis globais são declaradas da mesma forma que uma variável local - primeiro o tipo, depois o nome da variável. Mas a diferença é que esta variável é declarada fora de qualquer função. Por convenção, geralmente, utilizamos um underline (_) no começo do nome da variável para facilitar a leitura do programa e facilmente percebermos de que se trata de uma variável global.

Variáveis globais podem ser utilizadas por qualquer função. E qualquer função pode alterar o valor, utilizá-la em um processo ou até mesmo atribuir o valor que quiser.

#include <iostream>
#include <cstdlib>
using namespace std;
int _iniciado=0; //variável global começa em 0
void start (void)**
_iniciado++*
**
int main (void)**
start ()* //chamando a função start
int x=0, opcao; // variáveis locais, apenas a função MAIN pode utilizar
x++*
cout <<"Este programa foi iniciado "<<_iniciado<<" vez(es)"*
cout <<"\nO valor de X e "<<x;
cout <<"\n\nDeseja reiniciar o programa?\n1.\t\tSIM\nOutro numero\tNAO\n"*
cin >> opcao;
cin.ignore ()*
if (opcao==1)
main ()* //reiniciar o programa
return 0;
**

Perceba que a variável _iniciado está sendo usada nas duas funções - main e start. Toda vez que a função start é chamada, é incrementado (somado) um a _iniciado. Prestemos atenção no seguinte também, dentro da função main também tem uma variável chamada x que toda vez que chamamos main deve ser incrementada (x++).

Então, por que apenas o valor de _iniciado muda e x continua sempre 1?

É aí que está a vantagem e também a desvantagem da variável global.

A variável global está constantemente na memória. O fato de reiniciar o programa ou não, pouco importa, porque o valor de _iniciado nunca é reinicializado quando chamamos uma função. A não ser que em algum lugar do programa nós especifiquemos isso.

Já as variáveis locais estão presas as funções. Cada vez que chamamos uma função, também chamamos as variáveis dentro da função. Se finalizamos uma função, também finalizamos a variável. Resumindo, se reiniciamos a função, também reiniciamos a variável daquela função.

A desvantagem da variável global é a dificuldade de lidar com ela. Devemos usar variáveis globais apenas quando realmente necessário.

Porque, imagine usar uma variável global e dentro de nosso programa tem 10 ou mais funções, todas elas utilizando a mesma variável global e alterando seu valor. Ao final de todas as operações, dificilmente saberemos qual será seu resultado. Ou seja, isso dificultará a lógica do nosso programa, deixando-o difícil de interpretar.

Fonte: Tiexpert
Koily
Koily
Coordenador

<b>Idade</b> Idade : 29
<b>Posts</b> Posts : 4744
<b>Créditos</b> Créditos : 250
<b>Respeito</b> Respeito : 36
Foco, força e fé.
Warning :  [C/C++] Variáveis Globais e Locais ZsaKMOb
Ótimo tutorial! ;} Vale a pena estudar com estes tutoriais, são ótimos.
Ir para o topo
Permissões neste sub-fórum
Não podes responder a tópicos