DOUG LLOYD: Como você começar de trabalho com funções,
outra coisa vai tornar-se realmente importante entender,
que é o conceito de extensão variável.
Então, é um escopo característica de uma variável
que define a partir do qual funções essa variável pode ser acessado.
>> Existem dois âmbitos principais em C, variáveis ​​locais e variáveis ​​globais.
Agora, as variáveis ​​locais só pode ser acessado dentro das funções
em que eles são criados.
Eles não podem ser acessados ​​por todos os outros função que existe em seu programa,
apenas a função de o qual foi criado.
As variáveis ​​globais, sobre o Por outro lado, pode ser acedido
por qualquer função no programa.
E a razão para isso é porque eles não estão criadas dentro
de qualquer função particular.
Nós declará-los fora do todas as funções, que
significa que todas as funções sabe onde que é e pode acessar e manipulá-lo.
>> Até agora, no curso que você tem bastante muito trabalhado exclusivamente
com variáveis ​​locais.
Aqui está um exemplo de uma muito, muito principal função simples e uma forma muito simples
função adicional que temos escrito.
Neste caso, X, que Eu colori verde apenas
para destacar a localidade ou o alcance desta variável,
é local para a função tripla.
principal não pode se referir a x em tudo.
Ele não sabe o que é.
Nenhuma outra função, na verdade, se tinha funções adicionais aqui,
poderia se referir a x.
>> Da mesma forma, resulta que eu tenho cor azul, é local apenas para principal.
Apenas principal sabe o que o resultado é variável.
triplo não pode usá-lo.
>> Agora, como eu mencionei, existem variáveis ​​globais.
Se você declarar a variável fora de qualquer função,
todas as funções do programa pode se referir a ele.
Portanto, neste caso eu tenho em destaque na verde uma declaração de variável global.
Neste caso, o ser variável declarada
é chamado global, apenas para ser extremamente claro sobre o assunto.
É do tipo float.
E eu atribuí-lo o valor 0,5050.
>> Você vai notar que, em principal e em triplo, eu sou capaz de se referir a global.
E, de fato, se eu ir através do programa como indicado, principais primeiros convites triplo,
multiplica por 3 triplos globais, que define seu valor como 1,5-algo,
1,51 ou algo assim, e então principal também imprime o valor
do global.
Assim principal não irá imprimir 0,5050-lo, irá imprimir tempos globais 3, 1,51.
Então você tem que ter cuidado ao você está trabalhando com variáveis ​​globais.
Enquanto eles são muito flexíveis na ser capaz de passar informações
em torno de modo que cada função pode usá-lo,
ele também pode ter alguns consequências perigosas
se as mudanças Uma função o valor de uma variável
antes que você espera que ele seja alterado.
>> Por que essa distinção importa?
Por que nos importamos se algumas variáveis são locais e outros são global?
Bem, para a maior parte, as variáveis ​​locais em C são o que é chamado passados ​​por valor
quando fazemos uma chamada de função.
O que isso significa?
>> Bem, quando uma variável é passado por valor, o receptor, que
é outra maneira de dizer a função que está a receber a variável que
é passado no como uma entrada, ele realmente não recebe a própria variável.
Ele recebe o seu próprio cópia do mesmo para trabalhar.
Esta é uma distinção muito importante.
Nós só vimos um segundo atrás que com variáveis ​​globais,
se manipular o mundial variável em função um, o efeito
em que uma função carrega através de qualquer outra função.
>> Mas com variáveis ​​locais, isso não é verdade.
Cada função quando ela recebe como variáveis ​​de entrada
receber cópias dessas variáveis, não as próprias variáveis.
Então, qual é o efeito colateral de que?
Isso significa que a variável entre o chamador, a função que
é fazer a chamada de função, é inalterada, a menos que você o substitua.
>> Por exemplo, neste código foo não é alterado em tudo.
Int foo é igual a 4, chamar triplo de foo, dentro de triplo,
esperaríamos que fosse foo ser multiplicado por 3, e voltou,
mas não há realmente nenhum efeito.
>> Aqui, porém, uma diferença muito sutil.
Isso tem o efeito que queremos.
Você percebe por que?
Estamos substituindo foo na principal neste momento.
>> Assim int foo é igual a 4, é igual a foo foo triplo, quando nós fazer essa chamada,
triplo obtém sua própria cópia de foo, sua própria cópia do 4.
Diz voltar 4 vezes 3, ou qualquer variável é passado em tempos 3.
E então vamos atribuir o retorno valor do triplo para foo novamente.
Então, isso realmente iria substituir foo.
Esta é a única maneira de fazê- isso com variável local.
Portanto, agora se acrescentarmos outro linha de código aqui
no final da página para imprimir o valor de foo,
seria de fato imprimir 12.
>> O escopo de variáveis ​​é geralmente não muito de um problema
se você nomear todos os seus variáveis ​​coisas diferentes.
Mas ele pode ficar tipo de desagradável Se o mesmo nome de variável
aparece em múltiplas funções, que vai acontecer muito.
Se você já não funcionam em o mundo real, onde
você está trabalhando em colaboração programas e pessoas em equipes diferentes
estão trabalhando juntos para escrever o mesmo programa ou o mesmo conjunto de programas,
eles freqüentemente vai reutilizar variável nomes, especialmente os comuns
como X, Y, I, J, e assim por diante.
>> Mas quando tem variáveis o mesmo nome, as questões de escopo
pode ficar um pouco mais complicado para analisar.
Por exemplo, você sabe o que seria impresso
no final deste programa em particular?
Tome um minuto.
Pausar o vídeo e leia através deste programa.
Você pode ver no topo nós tem uma declaração de função
para uma função chamada de incremento.
Essa função tem um único parâmetro, um número inteiro que chamamos x.
E ele gera um número inteiro.
Esse é o tipo de retorno no início.
>> Então nós temos principal, um par de linhas de código na página, a última das quais
é uma declaração de impressão.
E lembre-se, essa é a questão aqui.
O que é realmente vai ser impresso no final desta função?
E então nós realmente temos o definição de incremento abaixo.
>> Então, tome um minuto, percorrer o código, trace as coisas.
Você sabe o que será impresso na no final deste programa em particular?
>> Tudo certo.
Esperançosamente, você tomou alguns segundos para tentar analisar um presente para fora.
Vamos fazê-lo juntos.
>> Então, eu tenho cruzado para fora incremento de declaração no topo lá.
Ele era uma espécie de distração.
Não é a sua própria variável.
Ele não tem o seu próprio âmbito.
É apenas uma função declaração, portanto, para fins
de tentar analisar o que está acontecendo neste programa,
podemos muito bem apenas evitá-lo.
>> Agora, temos neste caso, o razão pela qual este problema é complicado
é porque temos variáveis ​​locais em ambos principal e incremento, cada um dos quais
é chamado x.
E, claro, o cerne desta questão está tentando desvendá out que x é alterado
e como ele se mudou.
Então Eu colori cada instância de x é local para vermelho principal.
E Eu colori cada instância de x é local para incrementar azul.
>> Aviso nessa terceira linha de principal, y é igual incremento
x, esse incremento não está sendo passou x do principal, ou no X vermelho.
Ele está recebendo passou uma cópia do mesmo.
E isso só vai funcionar com que cópia do mesmo, o x azul.
Se você é matematicamente inclinado, você pode
em vez disso pensei nisso como sub x m para o principal e sub x i para incremento.
Mas é a mesma idéia.
x sub m, ou o vermelho x de no slide anterior,
são as variáveis ​​que são local-- é a instância de x em vez que
é local para principal e sub x i, ou a variáveis ​​azuis no slide anterior,
são os exemplos de X que são locais para incrementar.
>> Então, você foi capaz de descobrir o que esta função impressa no final?
Eu sou Doug Lloyd, e este é CS50.