o Olá vamos continuar aqui o nosso curso de programação C no nosso módulo sobre ponteiros e aí hoje eu trago à seguinte pergunta como passar um ponteiro como parâmetro para uma função ou um procedimento é isso então que nós vamos ver na aula de hoje nós já aprendemos como passar uma variável do tipo inteiro tipo o cara que quer e um ponteiro Será que tem uma diferença ou então vamos criar aqui uma simples variável int idade e aí eu vou atribuir aqui o valor 35 se eu quiser então fazer um procedimento para imprimir esse valor
perceba que a bem simples nós já aprendemos a fazer isso void imprimir eu vou receber um número do tipo inteiro posso dar um nome que eu quiser por exemplo em um ó e aqui dentro agora eu vou então escrever o código o que eu quero fazer com essa variável por exemplo eu posso apenas imprimir esse número na tela por cento de vou saltar uma linha e aqui eu vou então imprimir esse valor nós já aprendemos a fazer isso aqui no nosso curso eu simplesmente Criei um procedimento que recebe um número e imprimir este número na
tela para utilizar esse procedimento basta então chamar o procedimento aqui na nossa função Man passando Então qual é o número inteiro que eu quero mandar para lá o qual é a variável que eu quero mandar para lá eu sou Iva que vai te programa perceba que não tem nada demais nós apenas teremos aí o número 35 impresso na tela porém agora aqui vem alguns detalhes importantes Olha só se eu fizer qualquer alteração nesse valor aqui num recebe 80 percebeu estou alterando o valor dessa variável quando chegar aqui no Man qual vai ser o valor da
minha variável idade então eu vou colocar um texto aqui no nem vou imprimir aqui o valor da variável e eu vou saltar uma linha variável idade E aí qual será o valor o que que você acha Qual será o valor impresso aqui dentro da função bem e olha só eu vou compilar o programa novamente [Música] e nós temos 35 que foi impresso aqui eu alterei o valor para 80 e aqui na nossa função bem o valor continuou e na alterado continuou 35 por quê que isso acontece o que nós estamos fazendo aqui é uma passagem
de parâmetro é chamada como passagem de parâmetro por valor O quê que significa isso significa que eu não estou passando uma referência para variável idade ou eu não estou passando o nome da variável idade eu estou passando aqui o conteúdo o valor que a variável idade está aguardando ou seja qual o valor da variável idade é 35 eu estou passando aqui o conteúdo 25 quando chegar aqui no meu procedimento imprimir o computador vai separar uma área de memória vai dizer que o identificador das área de memória é num ou seja ele vai dar um nome
de num para essa área de memória e lá nessa área de memória ele vai colocar então o valor que foi e o valor 35 é por isso que quando eu faço qualquer alteração nessa variável a variável que eu tenho no meio permanece inalterada essa alteração aqui está sendo feita em uma cópia não é nessa variável até porque a minha variável idade como nós já vimos é uma variável local ela só existe aqui dentro do então eu não consigo acessar ela aqui no procedimento imprimir Ok existe uma segunda opção E aí muitos chamam de passagem de
parâmetro por referência E na verdade a gente pode entender como passagem de parâmetro por referência o que ocorre aqui é muito semelhante a passagem de parâmetro por referência mas a grande verdade aqui a linguagem C não suporta a passagem de parâmetro por referência ok O que nós vamos fazer aqui é algo aproximar é algo parecido E aí o que é Então essa tal passagem de parâmetro por referência a gente não passa mais o valor da variável a gente passa o endereço da variável nós já vimos Como obter o endereço de uma variável certo basta colocar
o e comercial na frente da nossa variável porém seu tentar executar o meu programa dessa forma nós teremos um erro porque eu estou enviando para o meu procedimento imprimir o endereço de uma variável ou seja o endereço de memória porém aqui na assinatura do nosso procedimento eu disse que ela recebe uma variável do tipo inteiro um valor do tipo inteiro e não o endereço de memória Então eu preciso alterar como que eu digo que eu vou enviar um endereço de memória basta colocar aqui um asterisco lembra quando a gente fria um ponteiro basta dizer o
tipo dá um identificador um nome e variados e à esquerda do identificador eu coloco ali um asterisco e isso indica que essa variável aqui é um ponteiro então perceba agora eu estou enviando o endereço de memória eu estou recebendo um endereço de memória esse endereço de memória aponta para uma variável do tipo inteiro e aqui agora eu quero imprimir o conteúdo apontado por essa endereço lembra nós temos duas situações em que nós utilizamos o asterisco quando a gente está criando a nossa variável que é a situação aqui e quando eu quero imprimir o conteúdo apontado
por esse ponteiro então aqui dentro também vou utilizar Esse asterisco aqui agora olha o que que eu tô fazendo aqui Eu não tô pegando conteúdo da variável e alterando para 80 então aqui nós também teremos que utilizar o asterisco Olha só eu quero imprimir o conteúdo apontado pelo ponteiro Ou seja eu quero pegar o conteúdo e por as ponteiro eu utilizo asterismo Eu quero alterar o conteúdo apontado por esse ponteiro Eu também utilizo* se eu fizer só isso aqui nós temos um erro porque eu estou alterando o conteúdo da variável um Qual que é o
conteúdo da variável um é uma endereço e 80 não é o endereço 80 um número inteiro então eu quero alterar eu quero atribuir o 80 para o conteúdo apontado pela variável não e aí você vai perceber um detalhe extremamente importante Olha só eu vou compilar e executar o meu programa agora olha o que que aconteceu é o valor que eu recebi aqui qual conteúdo apontado por esse endereço de memória 35 é o valor que eu atribui aqui na função mãe então eu alterei o conteúdo apontado por esse ponteiro para 80 quando voltou aqui no meio
e eu fiz a impressão do valor da minha variável idade olha aqui o que que nós temos aqui 80 Então quando você faz uma passagem normalmente chamado de passagem por referência lembre-se a linguagem ser não suporta a passagem de parâmetro por referência o que nós temos aqui ainda é uma passagem de parâmetro por valor porém o efeito é algo muito próximo a uma passagem de parâmetro por referência Porque continua sendo uma passagem por valor olha só essa variável aqui idade ela tem um endereço certo quando eu tô fazendo isso aqui eu tô falando de uma
cópia desse endereço e faça uma cópia desse endereço e mando para o meu procedimento o computador vai alocar memória para guardar o endereço de memória essa variável vai se chamar num e vai guardar o endereço de memória que foi passado como parâmetro E aí olha o que que acontece quando eu faço essa alteração eu não estou alterando o endereço de memória eu estou alterando o conteúdo apontado pelo endereço de memória como eu tenho aqui um endereço de memória para um de aponta esse endereço aponta para idade então é por isso que quando eu altero o
conteúdo apontado por esse ponteiro na verdade esse ponteiro aqui tá apontando para idade Então eu estou alterando esse valor aqui então continua sendo uma passagem de parâmetro por valor só que o valor que eu tô passando agora não é o valor da variável é o endereço da variável eu faço uma cópia desse endereço e ele aqui numa outra região de memória sempre que você passar para uma função ou um procedimento um endereço de memória sempre tenha muita atenção porque qualquer alteração feita no conteúdo apontado por esse endereço de memória vai se refletir no seu programa
inteiro Ok da forma como nós fizemos aqui eu alterei o conteúdo apontado por esse ponteiro Percebo o conteúdo aqui na função mãe foi alterado Então tenha sempre muita atenção ao passado endereço de memória como parâmetro para as suas funções ou procedimentos Ok é um recurso extremamente poderoso porém podem gerar ainda dos problemas e problemas lógicos problemas difíceis de serem resolvidos Ok se ficou qualquer dúvida já sabe postem nos comentários que eu terei o maior prazer em ajudar e se você não deu seu like nessa aula ainda deixa seu like nessa aula vai isso é muito
importante para o canal se inscreva no canal se você não é inscrito ainda do mais um grande abraço Bons estudos e até a nossa próxima aula