Olá, seja bem-vindo de volta.
Estamos em uma nova seção. Esta seção é chamada de ponteiros.
Esta é provavelmente a seção mais importante do curso.
Também é provavelmente a seção mais difícil do curso. O conceito de
ponteiros ec é um conceito complicado, complicado.
Mas vamos passar por isso bem devagar.
Faremos muitas palestras e daremos um passo a passo.
Vamos começar no nível mais alto e entrar em detalhes cada vez mais.
Você precisa entender os ponteiros se quiser aproveitar ao máximo
a linguagem c. Portanto, é muito importante.
Portanto, vamos começar do início e falar sobre esse conceito de indireção, que
é essencialmente o mesmo conceito de um ponteiro.
Portanto, os ponteiros são muito semelhantes ao conceito de indireção.
Você emprega indireção em sua vida cotidiana. Por exemplo, se estou
descrevendo o que significa indireção, seria como se
você tivesse que comprar algo novo, um novo produto em sua empresa.
Por exemplo, digamos que você tenha que comprar um novo cartucho de tinta para sua impressora.
Se você estiver trabalhando em uma grande empresa, o que
provavelmente faria é passar por um determinado
departamento para comprar novas compras. Portanto, você provavelmente irá ao departamento de compras.
Provavelmente, você ligaria para alguém para fazer
a compra e pedisse um novo cartucho para você.
Seria seu trabalho encontrar uma loja local
que fornecesse o item real que você deseja solicitar.
E o que isso significa é que você não vai pedir esse item diretamente para você.
Você está pedindo a alguém para fazer isso por você.
E então, por meio de sua experiência e conhecimento de
quem tem aquele produto em estoque, eles o
devolvem para você.
Portanto, este é um nível de indireção que diz respeito a você. Você não vai em frente e
simplesmente vai até a loja e compra. Você vai no departamento de compras, o
departamento da pessoa sabe que vai e faz de tudo para você.
Este é o mesmo conceito de ponteiro na programação.
Em linguagens de programação, indireção é a capacidade de referenciar algo usando um
nome ou referência ou contêiner em vez do próprio valor.
Usamos uma forma de interação usando nomes de variáveis.
Não usamos o endereço de memória para acessar os dados.
Usamos um nome de variável.
A forma mais comum de indireção é o ato de manipular um valor por meio
de seu endereço de memória.
Portanto, além de uma descrição muito
pequena de indireção usando um nome de variável para representar um endereço de memória, você também
manipula um valor por meio de seu endereço de memória usando o próprio endereço.
o próprio endereço.
Portanto, um ponteiro fornece um meio indireto de acessar o valor de um determinado item de dados.
É uma variável cujo valor é um endereço de
memória e é vital entender isso.
Aprendemos variáveis até este ponto que contêm certos
tipos de dados, números,
caracteres, duplos, flutuantes com números racionais.
Agora teremos uma variável que
não armazena nenhum desses tipos de dados.
O tipo de armazenamento de dados é um endereço de memória.
O endereço da memória será representado como um número inteiro, um
número hexadecimal, mas
ainda será um endereço da memória.
Portanto, será o valor de
um endereço e outro local da memória se for uma variável existente
ou um novo local que você alocar dinamicamente.
Portanto, assim como há razões pelas quais faz sentido passar pelo
departamento de compras para solicitar novos cartuchos, você
não precisa saber de qual loja específica os cartuchos estão sendo pedidos, por exemplo.
Existem também boas razões pelas quais faz sentido usar ponteiros
e c Para usar essas variáveis que representam um endereço, um endereço de memória.
Falamos sobre endereços de memória no início do curso.
E como sempre que você executa um programa e cria variáveis, essas são armazenadas na memória.
E essa memória tem um endereço particular. Você precisa saber o endereço para obter esses
dados de volta, assim como precisa saber o endereço de uma casa se estiver dirigindo para algum lugar ou
o endereço de um local.
Portanto, usar ponteiros em seu programa é uma das ferramentas mais poderosas disponíveis na linguagem c.
É por isso que é importante entender.
Qualquer programa em c que seja substantivo usará ponteiros.
Então você tem que entender esse conceito.
E para os programadores que programaram linguagens mais modernas como
java ou c sharp, você não precisa necessariamente se
preocupar com isso porque toda
a alocação de memória e não há nenhum
conceito real de ponteiros.
Mesmo sob o capô,
o java usa ponteiros porque eles têm cópias das referências.
É o mesmo tipo de conceito. Mas em c, você
tem explicitamente uma variável que representa um endereço.
Ponteiros também são um dos conceitos mais confusos da linguagem c.
Eles tendem a ser
abusados, eles tendem a não ser totalmente compreendidos, especialmente por novos programadores.
Portanto, é importante que você entenda esse conceito no início e
tenha uma ideia clara do que está acontecendo à
medida que você avança no conceito de c e de ponteiros cada vez mais avançado.
Portanto, se você não entende isso
no início, estude, estude, estude, pratique escrever código com ponteiros.
O compilador deve saber o tipo de dados armazenados na
variável para a qual ele aponta. Portanto, é como uma variável regular
e você deve especificar o tipo de dados ao criar o ponteiro.
O motivo pelo qual o compilador precisa saber disso é o mesmo motivo para
as variáveis, ele precisa saber quantos dados alocar, mesmo se você estiver apontando para alguns dados.
Cada ponteiro será associado a um tipo de variável específico.
Ele pode ser usado apenas para apontar variáveis desse
tipo, daremos um exemplo disso quando falarmos sobre a definição de um ponteiro.
Assim, por exemplo, ponteiros do tipo
ponteiro para ele só podem apontar para variáveis do tipo int.
Novamente, uma variável tem o
valor de um endereço, que é um ponteiro.
Esse endereço pode conter um valor em algum lugar da memória.
Ponteiros do tipo ponteiro para float só podem apontar para variáveis do tipo float.
Portanto, aqui está uma ideia
ilustrativa que lhe dá o conceito de um ponteiro.
Não se preocupe com a sintaxe aqui.
Discutimos brevemente em palestras anteriores esse e comercial e esse asterisco, você não precisa
necessariamente se preocupar com isso. O que quero que você
preste atenção aqui é como um ponteiro tem um endereço, e esse
endereço pode conter um valor, mas estar em outro lugar na memória.
Neste exemplo, estamos criando um número regular, criamos
um milhão de vezes, então você vê esta sintaxe com o asterisco que
significa que é um ponteiro. Vamos passar por isso em detalhes.
Você também verá o "e" comercial, o que significa que é um endereço.
Portanto, neste exemplo, quando criamos este ponteiro do tipo int p number,
estamos atribuindo um endereço. Porque lembre-se, os ponteiros só podem armazenar endereços.
E a forma como isso é realmente apresentado na memória é
que você tem um número de nome
de variável e o número tem um valor de 99.
O número também possui um endereço na memória.
Esse endereço na memória é o valor do ponteiro.
Portanto, o número p é um ponteiro que aponta para o endereço 1008.
1008 tem um valor de 99, contém também
o número da variável.
Então é isso que realmente queremos chegar. Se isso não estiver claro, você precisa olhar
para isso por uma hora e certificar-se de que entendeu.
Novamente, o ponto é que um ponteiro tem um valor para
um endereço, é isso que ele armazena.
E então você pode realmente acessar o valor naquele endereço usando certa sintaxe.
Então, por que usar ponteiros, por que abordar esse conceito, por que não
podemos simplesmente usar tipos de dados
existentes que usamos e usar a matriz de caracteres quando queremos usar strings.
Bem, acessar dados por meio de apenas variáveis é muito limitante.
Com os ponteiros, você pode acessar qualquer local, pode tratar qualquer posição da memória
como uma variável, por exemplo, e então você pode realizar aritmética com ponteiros
também, o que torna as coisas mais fáceis.
Os ponteiros em c facilitam o uso de arrays
e strings, e vamos examinar isso também; essa é outra vantagem de usar ponteiros.
Os ponteiros permitem que você consulte o mesmo espaço e memória com vários locais.
Isso significa que você pode atualizar a memória em um
local e, em seguida, a alteração pode ser vista em outro local em seu programa.
É uma forma de usar dados globais, mas ainda tendo funções internas encapsuladas.
Você também pode economizar muito espaço de memória, podendo compartilhar componentes em suas
estruturas de dados.
Portanto, lembre-se, quando c foi inventado, c foi inventado nos anos 70.
A ideia de c era ser muito eficiente e de baixo nível.
A ideia de acessar a memória diretamente por meio de ponteiros
é muito
eficiente e também muito rápida.
Os ponteiros também permitem que as funções modifiquem os dados transmitidos a
eles como variáveis. Isso é passado por referência. Vamos ter uma palestra sobre isso.
É aqui que você pode passar argumentos para uma função com seus ponteiros.
E então, dentro da função, quando você altera esses
dados, a alteração será refletida fora dessa função.
Portanto, não precisamos mais usar dados globais.
Podemos usar dados dentro de uma função, passar esses
dados como um ponteiro e então os dados fora
dessa função serão alocados. Portanto, não tem a desvantagem
de usar variáveis globais onde tudo está fortemente acoplado, você pode
limitar isso apenas aos dados que precisam, apenas às funções que precisam saber esses dados.
Como mencionei, ele também pode ser usado para otimizar o programa para ser executado mais
rápido e usar menos memória do que usaria
de outra forma, o que
é um conceito importante, especialmente em programas de tempo real integrados.
Os ponteiros também nos permitem obter vários valores de uma função.
Falamos sobre funções sobre como você pode passar funções de dados.
Também falamos sobre como você pode retornar dados.
Sabemos que agora você só pode retornar um valor de uma função.
Mas, se você usar ponteiros, poderá, na verdade, retornar vários valores de uma função.
E vamos falar sobre isso. Essa é uma grande vantagem.
Também vamos falar sobre alocação dinâmica de memória.
Agora, quando criamos memória para um programa, isso é feito
implicitamente pelo compilador quando você declara uma variável.
Se você declarar uma variável int, ele cria automaticamente 4 bytes para essa variável, por exemplo.
Quando você está usando arrays e especifica o tamanho de
um array, esse tamanho é alocado em tempo de compilação.
Então, se você está tentando armazenar mais dados do que isso, você está
ferrado, seu programa não vai funcionar.
Mas se você tivesse a capacidade de realmente
criar tanta memória quanto você precisava em tempo de execução,
isso seria enorme. E os ponteiros permitem que você faça isso.
Eles permitem que você crie memória em tempo de execução dinâmico, alocação de memória.
Também vamos falar sobre isso.
Os ponteiros nos permitem projetar e desenvolver estruturas de dados mais complexas.
E a estrutura de dados é algo que armazena dados.
Exemplos de estruturas de dados são pilha uma sugestão ou uma lista vinculada.
E podemos criar esses muito mais fáceis usando ponteiros.
Os ponteiros fornecem acesso direto à memória, mais uma vez, rápido e eficiente.
Portanto, as dicas serão um grande conceito. Teremos muitas palestras sobre ponteiros.
Quero que vocês se concentrem, e quero que prestem atenção quando falo sobre todos esses
conceitos, porque é importante e vital para entender a linguagem de programação c.
Então, boa sorte e vamos começar. Obrigada.