finalmente aprenda PONTEIROS (C/Rust/Python)

Поделиться
HTML-код
  • Опубликовано: 15 мар 2024
  • 📚 Livro para entender estruturas de dados e algoritmos: amzn.to/4bYu4VE
  • НаукаНаука

Комментарии • 74

  • @angelo_alsol
    @angelo_alsol 3 месяца назад +37

    Um adendo:
    Variaveis de tamanho fixo como numbers e boolean, ficam armazenadas na Stack de memoria, por esse motivo, quando vc atribui y = x, sendo x um Number, o programa consegue copiar o valor de x para y.
    Quando estamos lidando com variaveis de tamanho relativo (podem ser alteradas, sem serem recriadas) como arrays, na Stack apenas ficara alocado o endereco de memoria do Heap onde o valor da variavel esta armazenado. Desse modo, quando vc atribui y = x, sendo x um array, vc esta atribuindo a y um endereco (ou ponteiro) que esta alocado na Stack, e nao o valor de x.
    Isso ocorre porque a Stack precisa ter um tamanho determinado na hora da execucao, entao algumas linguagens como Rust, escolhem fazer deste modo sua arquitetura (alocando variaveis de tamanho relativo no Heap).
    Posso ter me enganado em algo, mas eh por ai... li essa explicacao no livro The Rust Programming Language.

    • @Lucs-ku5cb
      @Lucs-ku5cb 3 месяца назад +3

      Certíssimo!
      Em rust você também pode criar seus próprios tipos que clonam por padrão sem a necessidade de chamar o metodo clone() explicitamente
      Basta adicionar #[derive(Copy, Clone)]

  • @igorcastilhos
    @igorcastilhos 3 месяца назад +14

    Ponteiros são importantes em Go também e é uma linguagem que tá crescendo bastante. Ótimo vídeo Galego.

  • @victorvilela_
    @victorvilela_ 3 месяца назад

    Excelente conteúdo e didática!

  • @ferreiiratech
    @ferreiiratech 3 месяца назад

    Excelente vídeo e didática. Muito bom!

  • @fdstv7755
    @fdstv7755 3 месяца назад

    conteúdo e qualidade fantástica, parabéns !

  • @ithallotulio
    @ithallotulio 3 месяца назад

    Tava querendo aprender ponteiro e vc lança esse video, sabe muito

  • @Edulira17
    @Edulira17 3 месяца назад +2

    Muito bom !! Estou no 3 período da faculdade e estou aprendendo Estrutura de Dados com C, seu vídeo me ajudou muito cara, obrigadao!

  • @keuwey
    @keuwey 2 месяца назад

    Que conteúdo bom. Tô gostando muito do seu canal. Python foi a minha primeira linguagem, antes mesmo do HTML. Recentemente venho aprendendo java por causa da faculdade e apesar de entender o porquê dos memes com ela, tô achando bem legal. Também planejo estudar C, C++ e Rust pra aprender mais sobre esses conceitos avançados de ponteiros, stack, heap, threads, garbage collector, Big O notation etc.

  • @vrnrx27
    @vrnrx27 3 месяца назад

    Gostei do video, confesso q eu nao tenho tanto conhecimento afundo da linguagem, mas eu entendi o que você quis dizer, e realmente, eu nunca vi ponteiros e fiquei um pouco perdido mas entendi sua explicação !

  • @Luc4s_unu
    @Luc4s_unu 3 месяца назад

    top dms!

  • @JustCandAngular
    @JustCandAngular 3 месяца назад

    Eu tinha um conceito muito mais complexo na cabeça kkkkk obrigado augusto por resumir tudo que eu aprendi na faculdade.

  • @PauloSGM
    @PauloSGM 3 месяца назад

    Muito bom. Adquiri um novo soft skill.

  • @lacrador_idiota
    @lacrador_idiota 3 месяца назад

    python e js poderiam ter algum esquema de especificar ponteiros, iria ser mto util

  • @Ellipsis_
    @Ellipsis_ 2 месяца назад

    eu aprendi tudo isso em Go kkk, e os Slices que seriam os Arrays sem tamanho fixo de la, tem o atributo de apontar pro endereço de memória por de baixo dos panos, por isso em Go fica claro questões de uso do Array e de Slices q sao bem mais utilizados la, do q outras linguagens

  • @marcuspessanha1237
    @marcuspessanha1237 3 месяца назад

    Baita vídeo Galego! Creio que nós pythonicos só aprendemos isso quando esbarramos na necessidade de usar .deepcopy kkkkk pelo menos comigo foi assim. Um abraço!

    • @thyagooliveira7
      @thyagooliveira7 2 месяца назад +1

      Noossa, que inferno foi depurar um código gigante sem fazer ideia de onde estava o problema por não conhecer o .deepcopy. Tu rssgatou traumas que eu não lembrava kkkkkkkkk

    • @marcuspessanha1237
      @marcuspessanha1237 2 месяца назад

      @@thyagooliveira7 kkkkkkkkkkkkkkkk sorry man

  • @rodrigogois3790
    @rodrigogois3790 3 месяца назад +1

    No gráfico vc tem um ponteiro que guarda outro ponteiro. Mas na implementacao nao.
    x e y teriam o mesmo endereço 0xcccc.

  • @moimsk8
    @moimsk8 3 месяца назад

    Incrível que certas coisas que aprendemos há 10, 15 ou n anos atrás voltam a evidência, como no caso dos ponteiros. Minha segunda linguagem na faculdade foi C e isso foi o "Mindblowing" naquele momento. Quando chegamos no Java (na minha época era a matéria de linguagem de programação III) o professor tinha falado: ponteiros? Você até pode mexer isso no Java, mas esquece isso porque nossa máquina virtual Java vai cuidar disso pra você.
    É isso aí

  • @isackcosta5660
    @isackcosta5660 3 месяца назад +1

    cara, aprendi

  • @levirenatto924
    @levirenatto924 2 месяца назад

    Cara isso é mt legal vei, quero aprender mais disso onde eu posso ler ou aprender esse tipo de conteúdo? (Eu vou pesquisar mas se vocês tiverem uma boa fonte por favor compartilhar)

  • @user-iy8sx1ko4x
    @user-iy8sx1ko4x 3 месяца назад +20

    na hora que voce explica a declaração do porque o ponteiro é um int, sua explicação foi equivocada. Você declara o ponteiro como int *y porque o endereço de memória que você está guardando armazena um inteiro, logo, caso fosse um ponto flutuante, seria float *y. Isso porque espaços de memória sao reservados de acordo com a demanda de bits do respectivo tipo de dado armazenado, portanto o tipo deve ser especificado. Não tem nada a ver com o identificador do espaço de memória

    • @luizfilipe7630
      @luizfilipe7630 3 месяца назад +5

      sim, tbm estranhei isso. em 5:28, eu queria tbm q ele explicasse q o x n guarda o vetor, e sim o ponteiro tbm, mas pelo menos ele avisou q foi uma simplificação. no mais o vídeo tá mto bom, o Augusto faz um trabalho excepcional introduzindo esses assuntos pros javascriptos

    • @user-iy8sx1ko4x
      @user-iy8sx1ko4x 3 месяца назад

      @@luizfilipe7630 concordo. tive bastante prática com C, ponteiros nao é um assunto obvio de fato kkkk, ele deu uma boa introdução

    • @TheMaxwell1982
      @TheMaxwell1982 3 месяца назад

      Em C vc não é obrigado a especificar o tipo do ponteiro, tanto que pode declarar algo como void *i e fazer i = malloc(sizeof(float)); ou i = (void *) &. Os tipos são úteis na hora de fazer aritmética de ponteiros.

    • @TokaGado
      @TokaGado 3 месяца назад

      Muito bem, um int em C armazenamento 4 Bytes por exemplo(na maioria dos compilers), um char 1 Byte. Arrais é são uma sequência de endereços alocados em sequencia a partir do primeiro índice, é quase que lindo qnd entendemos isso em C. Mas queima neurônios até consagrar a sabedoria.

    • @luizfilipe7630
      @luizfilipe7630 3 месяца назад +1

      @@TheMaxwell1982 sim, mas a discussão aqui é q no vídeo ele diz q devemos colocar int* pelo motivo do endereço ser expresso em um número inteiro

  • @ojuliomiguel
    @ojuliomiguel 3 месяца назад

    Um dos problemas muito comum no javascript é passar uma variável por um parâmetro de uma função e modificar esse parâmetro internamente na função refletindo na variável passada.
    function modificarObjeto(obj) {
    // Modificando a propriedade do objeto
    obj.nome = "Novo Nome";
    }
    Esse tipo de uso já vi causar muitos problemas - inclusive o lint nem deixa fazer isso.

  • @glavila
    @glavila 3 месяца назад

    5:32
    No meu entendimento, o que aconteceria então, seria y apontando para o primeiro elemento da lista de x (index 0), e por meio de aritmética de ponteiros, conseguiríamos acessar os outros valores, e aplicar funções como no caso, o append( ), certo? Ou é algo além disso?

    • @luizfilipe7630
      @luizfilipe7630 3 месяца назад +2

      no python se eu n me engano, quando vc dá um append num array, ele cria um completamente novo com tamanho n+1 pra conseguir inserir o q vc quer

    • @glavila
      @glavila 3 месяца назад +1

      ​@@luizfilipe7630Faz sentido. Se estivéssemos lidando com um array dinâmico, surgiriam algumas considerações adicionais. Adicionar elementos no início e no final da fila seria facilmente resolvido utilizando uma lista encadeada circular. Mas isso apenas resolveria o problema para a função append, outras funcionalidades, que necessitariam acessar um elemento na lista de index qualquer teriam mais trabalho para encontrar o índice apropriado. Isso com certeza ia ter mais custo computacional do que simplesmente criar uma nova instância da lista de tamanho n+1 com os valores copiados. Depois é só desalocar a antiga lista, o que provavelmente é feito de forma automática em python, imagino eu.

  • @clintonrocha4980
    @clintonrocha4980 3 месяца назад +1

    Pf, coloca um zoom nesse vscode, obrigado!

  • @KLORETO
    @KLORETO 3 месяца назад

    O Y é o amiguinho da 'cola', não tem valor, apenas uma referência.
    O (Y) próprio valor pode ser outro.😅

  • @FakeLewis
    @FakeLewis 3 месяца назад

    Quabdo comecei com JS e descobri a "passagem por referência" que tanta gente reclamava, eu imediatamente imaginei "parece com ponteiros"

    • @TokaGado
      @TokaGado 3 месяца назад

      Em JS não tem um lance que variáveis décadas com let são locais e com var são globais?

    • @FakeLewis
      @FakeLewis 3 месяца назад +2

      @@TokaGado sim, mas isso tem mais a ver com escopo de código que com ponteiros

    • @mangycornet2395
      @mangycornet2395 3 месяца назад

      ​@@TokaGado a estrutura dos ponteiros de uma variável pode ser local ou global e isso gera comportamentos estranhos no JS se comparado com outras linguagens.

  • @lacrador_idiota
    @lacrador_idiota 3 месяца назад

    javascripto, nova versão de calabreso

  • @JoSanInk
    @JoSanInk 2 месяца назад

    eu sou iniciante e uma coisa que eu não entendo é: pq eu iria querer o mesmo valor em 2 variáveis diferentes?

  • @Chapeu_de_aluminio
    @Chapeu_de_aluminio 3 месяца назад +1

    Só parece difícil, não é. Programo em c/c++ há anos, e amo ter esse controle.

    • @PenseBaixoNivel
      @PenseBaixoNivel 3 месяца назад

      To a 12 anos mexendo com o assembly da at & t e te digo, não existe "variaveis" são apelidos dados a endereços de memoria, e o quanto antes o pessoal novato entender isso, mais facil fica ponteiros....

    • @PenseBaixoNivel
      @PenseBaixoNivel 3 месяца назад

      Imagina os novatos entenderem registradores...e operaçoes bit a bit...

    • @ruelcio3353
      @ruelcio3353 2 месяца назад +1

      @@PenseBaixoNivelqueria entender isso, mas tem pouco conteúdo sobre..

    • @PenseBaixoNivel
      @PenseBaixoNivel 2 месяца назад

      @@ruelcio3353 Ter conteudo tem, porem em ingles...

    • @PenseBaixoNivel
      @PenseBaixoNivel 2 месяца назад

      @@ruelcio3353 É bem simples, mas é preciso q a pessoa tenha uma base solida de Sistemas operacionais antes....

  • @joshuaoliveira8059
    @joshuaoliveira8059 3 месяца назад +1

    5:55 / 6:33
    Pera, quer dizer então que, em python, quando é criada uma variável que recebe outra variável individual , `y = x`, indiretamente é um 'ponteiro' da variável individual. Mas e se for passada um complemento para essa variável? `y = x + 1`
    Vai ser criado um endereço novo diretamente na memória?

    • @kaehm9054
      @kaehm9054 3 месяца назад +1

      Cara isso depende mais de qual tipo de dado você está trabalhando. Geralmente nos temos os tipos "primitivos" que criariam um novo endereço de memoria só que se você trabalha com JavaScript, especialmente com a biblioteca React você vai ver muitas bizarrices se você não entender sobre o que o Augusto falou.
      Por exemplo, em React trabalhamos com estados e se o seu estado for um objeto, você vai ter que ter uma atenção a mais para altera-lo, e você vai usar muito o conceito de "DeepCopy" e "ShadowCopy". Eu não vou me estender porque se eu fosse escrever tudo iria dar um texto gigantesco, mas só com esses conceitos você pode procurar e entender melhor.

    • @bruno.obatista
      @bruno.obatista 3 месяца назад +1

      Pelo que entendi, quando são valores como inteiros, ele apenas faz uma cópia e não usa referência. Ele vai utilizar de ponteiros quando são listas, e ai sim ele altera o mesmo valor indepentende de qual variável é alterado.

    • @wellingtonferreira474
      @wellingtonferreira474 3 месяца назад +1

      É interessante ver um pouco sobre variáveis mutáveis e imutáveis. No geral as imutáveis tem seus valores copiados para o endereço de memória da nova variável e os mutáveis tem o a sua referência de memória atribuído a nova variável. Entao x = 5 e y = x, o x não tem a mesmo referência de memoria de y, mas no exemplo mostrado no video o array é mutável.

    • @joshuaoliveira8059
      @joshuaoliveira8059 3 месяца назад

      vou pesquisar mais sobre esses assuntos, obg a ajuda@@kaehm9054 😀

  • @adrianbueno6894
    @adrianbueno6894 3 месяца назад

    ENTREI NO VIDEO SO PQ TINHA RUST

  • @Kl4us13
    @Kl4us13 2 месяца назад

    Entao meu x e um ponteiro para o valor?

  • @Lucas-km8fr
    @Lucas-km8fr 2 месяца назад

    Só ficou muito pequeno o tamanho da fonte😢

  • @oenzolopes
    @oenzolopes 3 месяца назад

    Qual o nome desse programa de desenho?

  • @julianodibai7334
    @julianodibai7334 3 месяца назад

    Alguém sabe qual site desse quadro negro que ele usa para a explicação?

  • @caiozampini2112
    @caiozampini2112 3 месяца назад +1

    junior explica o que são pointers
    Edit: terminei de ver o vídeo e é um absurdo de desinformação, não fez o mínimo de pesquisa

    • @Bernardo_Steffens
      @Bernardo_Steffens 2 месяца назад +1

      O que ele falou de errado?

    • @guiseila_ok
      @guiseila_ok 2 месяца назад +1

      cara da a crítica e não justifica o que ele errou kkkkk, depois quer ter razão

  • @kkkippy
    @kkkippy 3 месяца назад +2

    03:08 - Bem, eu acho que você poderia ter só dito que era um operador address-of, que é um E comercial (&) que antecede uma variável, retornando seu endereço de memória

  • @yamsol1911
    @yamsol1911 3 месяца назад +1

    Olá!
    Por favor, alguém sabe qual o nome do aplicativo de desenhos usado pelo @GutoGalego (8:12)?