Mais de um ano sem entender esse conteúdo, e só com essa aula maravilhosa que parece q foi feita pra um acéfalo entender, que finalmente compreendi o que é ponteiro. Salvou minha vida demais!
O valor dos dois é o mesmo, só muda o sistema numérico: %p = valor em hexadecimal %d = valor em decimal Usamos o decimal por ser mais fácil de entender, apesar de não ser o melhor para representar endereços.
A melhor forma de entender ponteiros (e praticamente qualquer conceito de programação que quiser) é simples: USE O DEBUGGER e o visualizador de memória !! Desta forma, você poderá visualizar EXATAMENTE o que ele está querendo dizer. Ex: int x= 10; int *p; p = &x; Se você carrega no debugger, vai notar que o programa já tem as variáveis na memória ANTES do debugger iniciar (ele ainda vai passar a linha de x, mas p e x JÁ EXISTEM NA MEMÓRIA). Veja o que aconteceu aqui no meu debugger: "Inicio:" ( endereço de x= 0x22ff18 ... valor de x = 0x64 ou 40 decimal endereço de p= 0x22ff1c ... valor de p = 0x2 ou 2 decimal) "int x = 10;" ( endereço de x= 0x22ff18 ... valor de x = 0x10 ou 10 decimal endereço de p= 0x22ff1c ... valor de p = 0x2 ou 2 decimal) "int *p;" ( endereço de x= 0x22ff18 ... valor de x = 0x10 ou 10 decimal endereço de p= 0x22ff1c ... valor de p = 0x2 ou 2 decimal) Aqui nada muda, simplesmente o * serve para avisar ao compilador que, quando for buscar algo na variável p, interprete o valor de p como um ENDEREÇ0, e não como um valor. "p = &x;" ( endereço de x= 0x22ff18 ... valor de x = 0x10 ou 10 decimal endereço de p= 0x22ff1c ... valor de p = 0x22ff18 ou 10 decimal *p = 10 decimal ). Então, o endereço de p tem um valor 0x22ff18, mas como o compilador recebeu a informação que a variável p tem que ser tratada como um endereço, então, esse valor é um novo endereço que o compilador vai buscar... no caso, é o endereço da variável x, e neste endereço, existe o valor 10 decimal (na memória é assim: 10 00 00 00). Procurem entender as coisas pelo debugger e pela memória, parece complicado, mas é MUITO mais simples, porque você não vai depender só da explicação do professor, você vai ENTENDER como realmente o compilador está fazendo a nível de memória !!
Otimos videos professor, está ajudando muito. Eu só queria dizer que quando você diz que o endereço NULL não existe NÃO É VERDADE, esse é o primeiro endereço de memoria, o endereço 0 (zero), e quando você coloca seu ponteiro pra NULL você simplismente está apontando nesse endereço, e o sistema operacional está programado para nunca armazenar nada nesse endereço.
Vendo essa aula eu fiquei em dúvida da utilidade disso. Ai eu lembrei, serve para passar por referência não é isso? Acho que esta aula tinha que ser antes da de referência. Li que também é útil em struct. De qualquer forma as aulas são excelentes.
isso, na verdade ele substituiu o valor no endereço da memória que estava o "X" , sendo assim mudando o valor de "X" na memoria sem mexer no código que declara o valor de "X".
Professor como sempre suas aulas são muito boas e de grande ajuda, mas estou com uma pequena dúvida. O comando para exibir o endereço para onde o ponteiro esta apontando não seri esse aqui: printf("p=%p ",p); Pois quando coloco printf("p=%d ",p); aparecem apenas números. Desde já muito obrigado.
SIm, isso mesmo, deve ser apenas uma distração na hora de escrever o código e mostrar no projetor. O seu está aparecendo número provavelmente porque está usando Dev++, a ide que to usando dá erro, nem compila o código com placeholder de integer (%d) e variável pointer (p) como esse "printf("p=%d ",p); ".
O valor dos dois é o mesmo, só muda o sistema numérico: %p = valor em hexadecimal %d = valor em decimal Usamos o decimal por ser mais fácil de entender, apesar de não ser o melhor para representar endereços.
Mais de um ano sem entender esse conteúdo, e só com essa aula maravilhosa que parece q foi feita pra um acéfalo entender, que finalmente compreendi o que é ponteiro. Salvou minha vida demais!
Me indicaram como "O melhor professor de C" e É MESMO! Mto boa a aula.!!!
Obrigado
Desde 2012 até hoje , melhores explicaçoes basicas da linguagem c do youtube!
Muito bom mesmo, né cara ! Melhor que muito curso estrangeiro de universidade famosa.
Excelente. Sensacional. Ótima explicação. Simplificou o complexo. Esse dom é para poucos. Parabéns professor.
Valeu André, sua didática é muito boa, clara para pessoas que estão iniciando nesse mundo...obrigado.
O valor dos dois é o mesmo, só muda o sistema numérico:
%p = valor em hexadecimal
%d = valor em decimal
Usamos o decimal por ser mais fácil de entender, apesar de não ser o melhor para representar endereços.
Mito ! Excelente, ótima aula . O cara sabe ! Obrigado .
o unico prof q eu consegui entender esse conceito muito obrigado msm!!
Ótima didática e excelente conteúdo! Obrigado 👍👏
Vim pelo professor Leandro 😃
Sua explicação é excelente. Parabéns.
Simples e objetivo. Adoro seus vídeos professor.
Perfeito professor,
Parabéns.
Parabens Backes! MUITO Melhor q os outros prof da FACOM aki da ufu q eu n entendo nada na aul cof cof kkkkkkk
Excelente trabalho, professor, vc explica muito bem!!! Assim fica fácil de entender até os tópicos mais trabalhosos.... Obrigado!!
Aulas ótimas,
Você explica muito bem !
Horas de leitura e vídeo aulas tentando entender esse troço de ponteiro, foi aqui que eu recuperei as esperanças, obrigado professor
Feliz por poder ajudar :)
Claro como água. Muito obrigada, professor!
Parabéns, suas aulas são ótimas.
Que aula sensacional , Parabéns professor !!!
Aula salvando a disciplina de Estrutura de Dados, como sempre. Muito obrigada!
Eu que agradeço por acompanhar o canal!
Finalmente consegui entender ponteiros! Obrigada!!!
Explicação clara e simples, parabéns!
A melhor forma de entender ponteiros (e praticamente qualquer conceito de programação que quiser) é simples:
USE O DEBUGGER e o visualizador de memória !!
Desta forma, você poderá visualizar EXATAMENTE o que ele está querendo dizer.
Ex:
int x= 10;
int *p;
p = &x;
Se você carrega no debugger, vai notar que o programa já tem as variáveis na memória ANTES do debugger iniciar (ele ainda vai passar a linha de x, mas p e x JÁ EXISTEM NA MEMÓRIA).
Veja o que aconteceu aqui no meu debugger:
"Inicio:"
( endereço de x= 0x22ff18 ... valor de x = 0x64 ou 40 decimal
endereço de p= 0x22ff1c ... valor de p = 0x2 ou 2 decimal)
"int x = 10;"
( endereço de x= 0x22ff18 ... valor de x = 0x10 ou 10 decimal
endereço de p= 0x22ff1c ... valor de p = 0x2 ou 2 decimal)
"int *p;"
( endereço de x= 0x22ff18 ... valor de x = 0x10 ou 10 decimal
endereço de p= 0x22ff1c ... valor de p = 0x2 ou 2 decimal)
Aqui nada muda, simplesmente o * serve para avisar ao compilador que, quando for buscar algo na variável p, interprete o valor de p como um ENDEREÇ0, e não como um valor.
"p = &x;"
( endereço de x= 0x22ff18 ... valor de x = 0x10 ou 10 decimal
endereço de p= 0x22ff1c ... valor de p = 0x22ff18 ou 10 decimal
*p = 10 decimal ).
Então, o endereço de p tem um valor 0x22ff18, mas como o compilador recebeu a informação que a variável p tem que ser tratada como um endereço, então, esse valor é um novo endereço que o compilador vai buscar... no caso, é o endereço da variável x, e neste endereço, existe o valor 10 decimal (na memória é assim: 10 00 00 00).
Procurem entender as coisas pelo debugger e pela memória, parece complicado, mas é MUITO mais simples, porque você não vai depender só da explicação do professor, você vai ENTENDER como realmente o compilador está fazendo a nível de memória !!
Como você utiliza o Debug no C?
Muito bom professor, obrigado! !!!!!
parabéns amei suas aulas me ajudaram muito
Obrigado pelos esclarecimentos.
Mais um ótimo vídeo! Obrigado!
Excelente aula!!!!
Muito bom!
muito obrigado tirou minha dúvida
Essa música do super Mario do Nintendo 64 quebrou kkk ficou bom na introdução
me ajudaa:
Faça um programa usando ponteiros para ordenar 3 valores e mostral ordenado na tela
Otimos videos professor, está ajudando muito.
Eu só queria dizer que quando você diz que o endereço NULL não existe NÃO É VERDADE, esse é o primeiro endereço de memoria, o endereço 0 (zero), e quando você coloca seu ponteiro pra NULL você simplismente está apontando nesse endereço, e o sistema operacional está programado para nunca armazenar nada nesse endereço.
Vendo essa aula eu fiquei em dúvida da utilidade disso. Ai eu lembrei, serve para passar por referência não é isso? Acho que esta aula tinha que ser antes da de referência. Li que também é útil em struct. De qualquer forma as aulas são excelentes.
Me salvouu
8:29... Você diz que em momento nenhum mexeu com x, mas mexeu sim. (eu entendi o q vc disse, mas essa fala ficou meio confusa).
isso, na verdade ele substituiu o valor no endereço da memória que estava o "X" , sendo assim mudando o valor de "X" na memoria sem mexer no código que declara o valor de "X".
Professor como sempre suas aulas são muito boas e de grande ajuda, mas estou com uma pequena dúvida.
O comando para exibir o endereço para onde o ponteiro esta apontando não seri esse aqui:
printf("p=%p
",p);
Pois quando coloco
printf("p=%d
",p);
aparecem apenas números.
Desde já muito obrigado.
SIm, isso mesmo, deve ser apenas uma distração na hora de escrever o código e mostrar no projetor. O seu está aparecendo número provavelmente porque está usando Dev++, a ide que to usando dá erro, nem compila o código com placeholder de integer (%d) e variável pointer (p) como esse "printf("p=%d
",p); ".
Esse comando da o seguinte resutado
printf("p=%p
",p); (((p=0022FF24)))
Agora esse aqui da um resultado diferente
printf("p=%d
",p); (((p=2293540)))
O valor dos dois é o mesmo, só muda o sistema numérico:
%p = valor em hexadecimal
%d = valor em decimal
Usamos o decimal por ser mais fácil de entender, apesar de não ser o melhor para representar endereços.