[Powered by Google Translate] DAVID DICIURCIO: Então, um conceito importante para compreender em
programação é a noção de escopo.
Âmbito pode ser definida como o contexto em que a variável é
visível ou acessível.
Por exemplo, vamos dizer que temos uma função, principal, que é
suposto que incrementa uma variável, x, 1-2.
Como podemos ver, a principal inicializa x para um, imprime
algum texto, em seguida, executa o incremento da função, antes de
imprimindo mais texto.
Se esta função fosse para funcionar corretamente, seria
imprimir x como 2.
Vamos tentar.
>> Então, como você pode ver, o principal não faz o que esperávamos.
Ele devolve o valor 1, em vez
do que o 2 esperávamos.
A razão para este erro pode ser explicado pelo escopo.
Na função, principal, inicializado x
apenas dentro da função.
Em outras palavras, a variável x é declarada localmente dentro do
função, principal, e não é acessível
fora da função.
Apenas principal pode aceder x nesta situação.
Quando chamamos incremento nós não passamos x como entrada, mas
apenas uma cópia de x.
Como resultado disto, o incremento da função apenas adiciona
o valor de 1 para uma cópia do valor de x.
Mas não para o próprio x.
Quando voltar a principal, x em si não mudou em nada.
Assim imprimir x só vai produzir o valor de 1.
>> Bem, então, que deixa a questão: como devemos corrigir
esta função?
Uma solução é ter incremento de retornar um valor.
Deste modo, o incremento da função vai
nos devolver um inteiro.
Então, aqui está o nosso código revisto com a
função de incremento alternativo.
Aqui, em vez voltou a x + 1, em vez de apenas o fim
com x igual a x + 1.
Além disso, tomar conhecimento de que nós substituímos a saída de
incremento, anteriormente anular, com int, afirmando que
incremento vai agora passar de volta um valor inteiro.
Agora, depois de corridas de incremento, ele irá retornar com um valor de
2, exatamente como pretendia.
>> Outra situação que demonstra importância âmbito do
é em scopeloop.c.
Neste código, temos um loop em que a variável
total é inicializado durante cada passo.
Infelizmente, este código não compila.
Isto é porque o total variável na verdade não existe
fora do loop.
Variáveis ​​declaradas dentro de loops só existe dentro do
laço propriamente dito e é demonstrada no nosso erro
total de mensagem, não declarados.
O total variável tem ainda de ser declaradas no âmbito
da função principal.
Além disso, durante cada iteração do loop for nosso, nós
são reinitializing nosso total a 0.
Isso por si só não manter o código de compilação, mas
impediria total de já soma a um valor passado 1.
>> Mais uma vez, qual é a melhor maneira de corrigir isso?
Um dos métodos mais fáceis inclui fazer local total de
a função principal, em vez de para a própria espira.
Isto irá total para realmente aumentar, e, finalmente,
permitir que ele seja impresso após o loop.
Outra técnica que eu só vou resumir faria
ser o uso de variáveis ​​globais.
As variáveis ​​globais são variáveis ​​que são declaradas antes de main
que manter o seu valor ao longo de todo o programa.
É claro que as funções podem alterar o valor de um global,
mas eles não saem do escopo como variáveis ​​locais.
No entanto, o uso de variáveis ​​globais tende a ser careta
sobre como o design ruim, uma vez que existem maneiras melhores de
compartilhamento de dados entre as funções.
Por exemplo, o uso de ponteiros.
Mas mais sobre isso em outro momento.
>> Finalmente, é importante ter uma compreensão do escopo
no contexto da memória do computador, ou RAM.
Quando executar um programa, as variáveis ​​locais e funções
são adicionados a um local específico no
RAM chamado a pilha.
Como retorno funções, os quadros de pilha das variáveis ​​são
eficazmente removido da pilha liberando mais memória.
Assim, ao analisar o escopo, certifique-se lembrar estes três
pontos-chave.
Um escopo, pode ser local ou global.
Depende de onde a variável é declarada.
Duas variáveis ​​declaradas, ou inicializado em funções são
local para a função e não pode ser alterada por outra
funções, pelo menos não sem o uso de ponteiros.
Finalmente, as variáveis ​​são sempre locais de laçadas que são
declarado dentro.
As variáveis ​​não são acessíveis
fora do circuito.
>> Isso é tudo para agora escopo.
Obrigado por assistir.