Programar em C - Comportamento de Argumentos com Funções - Aula 38

แชร์
ฝัง
  • เผยแพร่เมื่อ 19 ธ.ค. 2024

ความคิดเห็น • 53

  • @Rafael-JC
    @Rafael-JC 2 ปีที่แล้ว +1

    like, like e like. A melhor explicação do YT sobre linguagem C!!!!!!

  • @rtcontavinteeum5899
    @rtcontavinteeum5899 10 ปีที่แล้ว +3

    estou aprender bastante, obrigado jovem.

  • @HOUPI_Games
    @HOUPI_Games 2 ปีที่แล้ว

    Entendi, então é por isso que na aula 36 não foi necessário retornar o resultado da ordem crescente do vetor/matriz, já que não estamos mexendo com a copia daquele vetor, e sim com o endereço de memoria dele, então qualquer função pode alterar o valor dele a qualquer momento e mesmo assim não será necessário retornar o valor dele caso outra função queira acessar as alterações feita nele. MUITO BOM!!
    Estou gostando muito das aulas e estou aprendendo bastante com suas aulas prof, muito obrigado por compartilhar mais uma aula incrível!!

  • @comentariodaofensa9582
    @comentariodaofensa9582 6 ปีที่แล้ว +1

    Melhor curso de C do youtoba!

  • @DeAlunoParaAluno
    @DeAlunoParaAluno  11 ปีที่แล้ว +1

    isso mesmo.

  • @joaojuruna
    @joaojuruna 4 ปีที่แล้ว +3

    Quem também ficou com dúvida em relação à posição do vetor eu fiz um teste aqui colocando o valor 20 em vetor[0]. E o que acontece é que o vetor, assim como ele explica no vídeo, acaba mantendo esse valor. É possível ver um exemplo disso na aula 36.

    • @eudelucas1300
      @eudelucas1300 ปีที่แล้ว +1

      Fiz exatamente a mesma coisa. Boa garoto!!

  • @William1Angel
    @William1Angel 11 ปีที่แล้ว +17

    Muito bom, estou aprendendo muito, e sei que quando eu estiver trabalhando em uma empresa como programador irei lembrar que muita coisa que saberei fazer dentro da empresa foi graças a suas preciosas aulas.
    Mas me tira uma duvida, o valor 10 do vetor[3], não esta atribuido no vetor[0] que é a primeira linha ?,Pois foi assim que aprendi com vocë.

    • @brenotanquista9543
      @brenotanquista9543 2 ปีที่แล้ว +4

      conseguiu trabalhar na area de programação?

  • @DeAlunoParaAluno
    @DeAlunoParaAluno  11 ปีที่แล้ว +1

    Isso mesmo :)

  • @aninhaprsouza
    @aninhaprsouza 9 ปีที่แล้ว +10

    Acontece que o professor atribuiu 10 à primeira posição e quando alterou, fez na segunda! Se a intenção era alterar o primeiro item do vetor, devia ser vetor[0]=20!
    Pequena falha técnica mas valeu muiiiiiiiiiito pelas aulas que estão me ajudando a desenferrujar!

    • @kamelotgames
      @kamelotgames 9 ปีที่แล้ว

      Ana Souza Eu testei aqui e rodou. pastebin.com/g19R4Z7v

    • @MatheusDantasCC
      @MatheusDantasCC 9 ปีที่แล้ว

      +Ana Souza isso, viu bem o erro. Ou só colocar vetor = 20;
      Pq só a palavra VETOR sem as "[]"?
      Quando chamamos apenas a palavra VETOR, isso que dizer que estamos chamando a primeira posição desse vetor. Ou seja, se quiser chamar/atribuir a primeira posição, apenas deixa o nome do array, que no exercício é VETOR.
      Espero ter ajuda!

    • @EfraimDays
      @EfraimDays 8 ปีที่แล้ว

      A intenção era mostrar que a variável é um cópia e o vetor não, logo o vetor ele inicia na posição que ele quiser, pois se iniciar na posição 2, por exemplo, não terá nenhuma diferença para passar a didática desta aula.

    • @aninhaprsouza
      @aninhaprsouza 8 ปีที่แล้ว +1

      Jesimiel Efraim Só comentei pois, se me recordo bem, o professor ficou meio confuso na hora.
      Isso acontece. ;-)
      Quem programa sabe que são muitos detalhes e a gente se distrai.

    • @EfraimDays
      @EfraimDays 8 ปีที่แล้ว +1

      Ana Souza realmente...

  • @andrebragagnollo2800
    @andrebragagnollo2800 6 ปีที่แล้ว

    muito bom

  • @dejairsisconeto7701
    @dejairsisconeto7701 8 ปีที่แล้ว +5

    Seria legal se os códigos estive no disponível no GitHub :)

    • @BazzTriton
      @BazzTriton 5 ปีที่แล้ว +4

      Escreva o código... ajuda a aprender mais.

  • @fallthrough_br
    @fallthrough_br 11 ปีที่แล้ว +1

    Cara, onde vc conseguiu baixar o DevC++ em português? Acho q isso iria me ajudar um pouco, no caso, se eu errasse alguma coisa no meu código. Vlw!

  • @wesleysantos6289
    @wesleysantos6289 3 ปีที่แล้ว +2

    É um comportamento diferente de outras linguagens! descobri pq o codigo que tentei adaptar de python para C estava dado erro, por causa que eu achei que estava criando uma coipia do vetor board que continha os dados do jogo da velha.

  • @SuperFeijaozinho
    @SuperFeijaozinho 9 หลายเดือนก่อน

    Se entendi bem, o valor imprimido do vetor foi 20 das 2 vezes, porque usou o endereço vetor[1], e o endereço do valor "10" é vetor[3]. Nao teve a ver com o caso de ser o valor da "copia" ou segunda variavel com o mesmo nome (como preferir chamar) e sim de ser o valor de endereços diferentes, em que num era a posição "1" do vetor e no outro era a posição "3" do mesmo vetor (quase como se fossem variáveis diferentes, pois correspondem a endereços de memoria diferentes). Certo?

  • @Hitz2604
    @Hitz2604 8 ปีที่แล้ว +2

    Se tivesse colocado Vetor [3] ali na função main, iria exibir 10?

    • @ddg7927
      @ddg7927 8 ปีที่แล้ว

      Não cara vetor[3] é o tamanho do seu vetor, se você fizesse um printf("%d", vetor[3]);
      iria ser imprimido o valor 0 e não 10. de uma olhada nas aulas anteriores que falam sobre vetores

    • @samuelsousamoraes2957
      @samuelsousamoraes2957 3 ปีที่แล้ว

      Nesse caso não tem como imprimir o vetor[3], pois só tem o vetor[0], vetor[1] e vetor[2], sendo que o vetor[2] é 0 ou '\0'

  • @DeAlunoParaAluno
    @DeAlunoParaAluno  11 ปีที่แล้ว +1

    hmm.. foi direto do site deles mesmo cara... bloodshed é o site

  • @brenobarbosa5732
    @brenobarbosa5732 8 ปีที่แล้ว +3

    Pq o vetor dele ta com indice "1", o primeiro indice nn é sempre o "0"... mi deixo confuso!?

    • @EfraimDays
      @EfraimDays 8 ปีที่แล้ว

      Desculpe meu linguajar, mas ele fez isso porque sim, pois veja bem, não há diferença nesse algoritimo se ele usar a posição inicial "0" ou o "1". Porém, se você quiser iniciar na posição 0, faça o seguinte.
      Dentro do main teŕa o "printf("Vetor na funcao principal = %d
      ",vetor[1]);" troque o 1 por 0 que ficará "printf("Vetor na funcao principal = %d
      ",vetor[0]);" e dentro da função void printf, troque o vetor[1]=20 por vetor[0]=20, e o, "printf("Vetor na funcao print = %d

      ",vetor[1]);" por "printf("Vetor na funcao print = %d

      ",vetor[0]);". Além disso, reveja as aulas de vetores, pois já era pra vc saber que ele inicia o vetor na posição que ele quiser.

    • @Relax-hq8yx
      @Relax-hq8yx 8 ปีที่แล้ว +1

      Jesimiel Efraim Engano seu amigo, o 10 tá na posição 0, ele imprimiu 20 pelo simples fato de dentro da função ele ter atribuído 20 na posição 1, e quando imprimiu o vetor na posição 1 saiu o valor 20, mas se ele agora imprimir o vetor na posição 0 na função principal vai sair 10.

  • @patriciacarvalhodemorais5769
    @patriciacarvalhodemorais5769 2 ปีที่แล้ว

    isso acontece pq apesar de ambas as variáveis se chamarem x, a da função print seria local da função, e por isso alterada apenas dentro desta e aparecendo a alteração só no print da função?? enquanto a variável x da main é também local apenas da main, e por isso uma variável diferente daquela da funçãoprint?? e vetores são sempre globais?? ou não tem nada a ver??

    • @HOUPI_Games
      @HOUPI_Games 2 ปีที่แล้ว

      É feita uma cópia da variável que colocamos na passagem do parâmetro, sendo assim sendo uma variável diferente da que esta na função main, e vetores não são globais, já que para acessar um vetor, é preciso fazer também a passagem dele assim como qualquer outra variável ou dado que desejamos fazer uma passagem. Porém o compilador, diferente do que nas variáveis. No caso do vetor, ele faz a passagem do endereço de memoria do nosso vetor/matriz, o que faz com que qualquer função possa fazer alteração nele, já que estamos mexendo com o próprio vetor e não uma copia dele. Todo vetor que estiver dentro de uma função ele será local e apenas aquela função pode acessa-lo, (a não ser que feita a passagem do parâmetro).
      Se um vetor for declarado fora da função main, ele será global. Ai sim outras funções pode acessa-lo sem a necessidade de passar os argumentos.

  • @samuelvieira4504
    @samuelvieira4504 8 ปีที่แล้ว +1

    e quanto a passagem por referencia? n existe isso em C?

  • @wesleyfeitosa0
    @wesleyfeitosa0 9 ปีที่แล้ว +1

    Uma função pode retornar mais de um valor?

    • @joaomarcuslemos2667
      @joaomarcuslemos2667 9 ปีที่แล้ว

      Wesley Feitosa Não, a função só pode retorna uma valor mesmo

    • @ddg7927
      @ddg7927 8 ปีที่แล้ว

      claro que pode return a, b , c; e assim por diante quantos vc quiser.

    • @Relax-hq8yx
      @Relax-hq8yx 8 ปีที่แล้ว

      Wesley Feitosa você pode testar condições para poder retornar vários valores de acordo com qual condição será verdadeira.

    • @Relax-hq8yx
      @Relax-hq8yx 8 ปีที่แล้ว

      por exemplo, se isso for verdadeiro retorna isso , caso contrário retorna isso, etc.

  • @luizeduardohorbealves1706
    @luizeduardohorbealves1706 9 ปีที่แล้ว +1

    O meu está exatamente igual e não compila por um erro na primeira void da funçao main, não entendo pq da esse erro se alguem poder me explicar eu agradeço desde já!

    • @MatheusDantasCC
      @MatheusDantasCC 9 ปีที่แล้ว

      +Luiz Eduardo Horbe Alves posta o teu código no pastebin e manda para que podemos ver e solucionar os problemas.

    • @ddg7927
      @ddg7927 8 ปีที่แล้ว

      Provavelmente você não soube declarar sua função

  • @lucasmendonca9702
    @lucasmendonca9702 7 ปีที่แล้ว

    show

  • @rodrigosilvaoliveira9235
    @rodrigosilvaoliveira9235 5 ปีที่แล้ว

    ALGUÉM ME CORRIJA POR FAVOR
    Criei dois vetores (Um para a Função secundária e um para a função principal)
    Linkei um vetor ao outro e funfo
    Aula boa mas no finalzinho eu fiquei meio em dúvida.
    Acho que a explicação no finalzinho saiu meio estranha.
    Ex: O código abaixo mostra que o valor do vetor na posição vetor[0] (Corrigindo o but no algoritmo) pode mudar dependendo de em que posição no algoritmo, a função (FunctionPrintf) é chamada e acho que mostra que o valor do (vetor[3]) foi copiado para o vetor (vet1[])...
    int main(void){
    setlocale(LC_ALL, "portuguese");
    system("color F0");
    void FunctionScanf(int vet1[]);
    void FunctionPrintf(int y, int vet1[]);
    int x = 10;
    int vetor[3];
    FunctionScanf(vetor);
    printf("
    \t\t OS NÚMEROS DIGITADOS FORAM:
    ");
    printf("
    \t\t\t VALOR DE X: [%i]
    ", x);
    printf("\t\t\t VALORES DO VETOR DE 3 BLOCOS:
    \t\t\t ");
    for(int c2 = 0; c2 < 3; ++c2){
    printf("[%i] ", vetor[c2]);
    }
    printf("


    ");
    printf("\t\t Variável INT X na Função principal = [%i]
    ", x);
    printf("\t\t Valor do Vetor na Posição [0] pela Função principal = [%i]
    ", vetor[0]);
    FunctionPrintf(x, vetor);
    // INTRODUZ O VALOR DA VARIÁVEL LOCAL X DA FUNÇÃO (main) NA VARIÁVEL LOCAL Y DA
    // FUNÇÃO (FunctionPrintf) E OS VALORES DO VETOR LOCAL (vetor) DENTRO DO VETOR
    // (vet1) DA FUNÇÃO (FunctionPrintf)
    printf("

    \


    ");
    system("pause");
    return 0;
    }
    void FunctionScanf(int vet1[]){
    // INTRODUZ 1 VALOR EM CADA UM DOS 3 BLOCOS DO vetor[3]
    printf("
    \t\t DIGITE 3 NÚMEROS PARA O VETOR DE 3 BLOCOS: ...

    ");
    for(int c1 = 0; c1 < 3; ++c1){
    printf("\t\t ");
    scanf("%i", &vet1[c1]);
    }
    }
    void FunctionPrintf(int y, int vet1[]){
    y += y;
    vet1[0] += vet1[0];
    printf("

    \t\t Variável X INT na Função Print é: = [%i]
    ", y);
    printf("\t\t O Valor do Vetor na posição [0] pela Função Print é: = [%i]

    ", vet1[0]);
    }
    //Copy Palladinus
    O que você quis dizer é que os valores de variáveis locais não podem ser alterados dentro de outras funções a não ser dentro das funções nas quais elas foram definidas mas os vetores sim?!

    • @MrEfraimfc
      @MrEfraimfc 5 ปีที่แล้ว

      Cara, reformule a sua dúvida kk Seu cometário tá muito confuso... :/

  • @danillofortuna601
    @danillofortuna601 11 ปีที่แล้ว +2

    na verdade voce atribuiu 10 à primeira posição do vetor, e 20 à segunda. estou certo? porque pelo que eu havia entendido a primeira posição é o [0] e nao o [1]. so pra ter certeza pq me confundi nessa parte.

    • @paulodesouza262
      @paulodesouza262 2 ปีที่แล้ว

      Sim, você está certo. Ele errou.

    • @ninja1690
      @ninja1690 2 ปีที่แล้ว

      @@paulodesouza262 Ah sim, obrigado. Até hoje estava tentando entender isso.

  • @gmartins-dev
    @gmartins-dev 11 ปีที่แล้ว

    Só uma coisa, quando vc chama a função de um outro arquivo tipo "Funcoes.h" eu nao preciso declarar ela ne, pq quando o programa faz o #include "Funcoes.h" ele ja faz isso?

    • @MrEfraimfc
      @MrEfraimfc 5 ปีที่แล้ว

      Precisa! kk
      A diferença é q vc deve declarar a função nesse arquivo " .h " kk :(

  • @micaelnascimento9282
    @micaelnascimento9282 10 ปีที่แล้ว

    isso acontece porque a variavel x foi declarada dentro da função principal e se por acaso voce tivesse declarado a variavel X como uma variavel global (fora da função principal ) sera que mesmo assim ainda seria uma copia , ou se comportaria da mesma forma ???

    • @jlucasxd
      @jlucasxd 10 ปีที่แล้ว

      Declarando "x" como uma variável global, não será preciso declarar uma variável local automática dentro da "funcaoPrint". Portanto, você alteraria o valor da variável global "x".

  • @Adestudos
    @Adestudos 7 หลายเดือนก่อน

  •  ปีที่แล้ว

    Corrigindo um vício de programação de funções.
    Ou você implementa a função:
    [tipo_retorno] nomeFuncao() {
    // Essa função define um campo, que pode receber o valor durante a depuração.
    [tipo] campo = {valor};
    }
    ou
    [tipo_retorn] nomeFuncaoComArgumento([tipo] parametro) {
    /* Operacoes com os valores passados como argumento */
    }
    void main() {
    [tipo] campo = "argumento";
    nomeFuncaoComArgumento(campo);
    }
    Definir um campo dentro da função que já declara um parâmetro do mesmo tipo que este campo seria redundante. Ou se implementa de um jeito, ou do outro (dependendo do projeto). Ou seja:
    [valor_retorno] nomeFuncao([tipo] t) {
    // Esta forma de programação é uma má prática, mesmo que usada na explicação sob efeito didático.
    t = {valor};
    }
    Observação: [tipo_retorno], [tipo], e {valor} estão baseados em conceito puramente matemático. É desnecessário definir [tipo] e [tipo_retorno] como int e subistituir {valor} por um número decimal.