Ponteiros em C | Surendra Varma | Skillshare

Velocidade de reprodução


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Aulas neste curso

    • 1.

      Intro de ponteiros

      1:01

    • 2.

      Compreendendo ponteiros

      16:23

    • 3.

      Aritmética de ponteiro

      6:52

    • 4.

      Ponteiros como parâmetros para funcionar

      3:44

    • 5.

      Ponteiro para uma função

      4:56

    • 6.

      Acessando a string usando ponteiros

      2:37

    • 7.

      Comparação de cordas usando ponteiros

      6:30

    • 8.

      Concatenação de cordas usando ponteiros

      5:51

    • 9.

      Encontrando o comprimento da corda usando ponteiros

      6:06

    • 10.

      Ponteiros e arrays 1D

      15:41

    • 11.

      Ponteiros e arrays 2D

      17:46

    • 12.

      Ponteiros duplas

      10:31

    • 13.

      Programa de exemplo em ponteiros duplos

      2:41

    • 14.

      Memória dinâmica e funções

      21:22

    • 15.

      Exemplo de Malloc()

      7:09

    • 16.

      Alloc()

      15:25

    • 17.

      Realloc()

      11:01

  • --
  • Nível iniciante
  • Nível intermediário
  • Nível avançado
  • Todos os níveis

Gerado pela comunidade

O nível é determinado pela opinião da maioria dos estudantes que avaliaram este curso. Mostramos a recomendação do professor até que sejam coletadas as respostas de pelo menos 5 estudantes.

28

Estudantes

--

Projeto

Sobre este curso

Nosso curso de ponteiros em C cobrirá os fundamentos dos ponteiros e como eles são usados na linguagem de programação C.

Começaremos explicando quais ponteiros são e como eles diferem das variáveis regulares. Em seguida, vamos cobrir como declarar e inicializar ponteiros e como atribuir valores a e recuperar valores de ponteiros.

Em seguida, vamos mergulhar no conceito de aritmética de ponteiro e como ele pode ser usado para manipular estruturas de dados na memória. Também discutiremos os vários tipos de ponteiros, como ponteiros de função.

Durante todo o curso, forneceremos exemplos práticos e exercícios para reforçar os conceitos cobertos. No final do curso, você terá uma compreensão sólida dos ponteiros em C e será capaz de usá-los de forma eficaz em seus próprios programas de C.

Conheça seu professor

Teacher Profile Image

Surendra Varma

Best Instructor

Professor

The name of the instructor is Surendra varma.

He is a winner of  BEST TEACHER award.

He is a winner of  Young Achiever award.

He holds Bachelors degree in Computer Science & Masters degree in Computer science. He cracked toughest exams in computer science such as GATE & UGC-NET with flying colors. Also, he is a university topper during masters.

He is currently Pursuing PhD from world's most reputed university Indian Institute of Sciences(IISC), Bangalore.

He worked with various EdTech companies in India including Great Learning. He always received best feedback from his students.

He has 14+ Years of experience in Teaching/research/Industry.

He worked in various roles like Software Engineer... Visualizar o perfil completo

Level: All Levels

Nota do curso

As expectativas foram atingidas?
    Superou!
  • 0%
  • Sim
  • 0%
  • Um pouco
  • 0%
  • Não
  • 0%

Por que fazer parte da Skillshare?

Faça cursos premiados Skillshare Original

Cada curso possui aulas curtas e projetos práticos

Sua assinatura apoia os professores da Skillshare

Aprenda em qualquer lugar

Faça cursos em qualquer lugar com o aplicativo da Skillshare. Assista no avião, no metrô ou em qualquer lugar que funcione melhor para você, por streaming ou download.

Transcrições

1. Intro de ponteiros: Olá a todos. Neste curso, discutimos sobre ponteiros em C. Então, primeiro, começamos entendendo os ponteiros em C e depois seguimos pelo ponto zero. Existem as operações médicas e posteriormente, relacionadas a indicadores e funções serão discutidas. E, em seguida, combinação de cordas e ponteiros. Então, será preciso saber se um anúncio é uma combinação. Posteriormente, discutiremos sobre ponteiros duplos e exemplos relacionados a ponteiros duplos e, finalmente, gerenciamento dinâmico de memória usando ponteiros. Então esse é o fim. Nosso currículo está relacionado a dicas. E ponteiros são o tópico mais importante na linguagem C. Ok? Portanto, use esses ponteiros. E isso definitivamente ajudará você a ter um bom desempenho no curso de estruturas de dados. Se você está tentando implementar em C. 2. Compreendendo ponteiros: Agora vamos discutir sobre o conceito de ponteiros. Então, antes de tudo, o que significa um ponteiro? Então, geralmente, goin determina uma variável que pode armazenar o endereço de outra variável. Então, há uma variável que pode armazenar o endereço de outra variável. Portanto, variáveis normais não podem conter o endereço de outra variável. É por isso que exigimos o conceito de ponteiros para armazenar o endereço de outra variável. Agora, mostrarei um exemplo para essa variável de ponteiro e sua representação. Agora, considere que a variável n é igual a dez. Ok? Portanto, essa é uma variável normal. Agora, deixe-me considerar que uma variável de ponteiro na estrela d está representando a variável de ponteiro. Agora estou armazenando o endereço de n nessa variável de ponteiro. Ok? Então, se você se concentrar neste exemplo aqui, e se eu começar a imprimir o valor n, o mesmo valor n pode ser obtido de várias maneiras. Então, por exemplo, se eu escrever DNH em dias pessoais, poderei exibir e valorizar. Da mesma forma, também posso usar a variável ponteira estrela p para exibir o valor de n para que seja baseado em pessoas. D star p pode ser usada para imprimir o valor de n. Então, se você considerar isso aqui, n é uma dívida de taxa variável. Então n é uma variável e seu valor correspondente é. Então, a estrela p é igual ao endereço. Muitas vezes. Estamos considerando o Ibis frequentemente como os anos 2000. E então p é uma variável de ponteiro, que contém o endereço de n e é 2000. Então p é um ponteiro segurando ou suavizando. Agora, estamos imprimindo o final aqui. Então, o que significa que isso exibirá a saída como dez. E estamos usando a estrela P para imprimir, o que significa como isso será avaliado. A estrela p representa abelhas iniciais contendo 2000. Então comece nos anos 2000, que significa o conteúdo dentro da localização da memória dos anos 2000. Portanto, essa estrela indica operador de indireção, o que significa que está atualizando o conteúdo dentro desse local de memória. Portanto, o conteúdo dentro dessa localização de memória 2000 é dez. Então, você vai fazer o ping do resultado como dez aqui. Agora, podemos escrever dois indicadores diferentes. Então, ao declarar, vamos supor que eu esteja considerando pontos diferentes aqui na estrela aqui. Então isso é um indicador. Portanto, posso considerar isso como um ponteiro, que pode apontar para esse local. Portanto, isso é um indicador para um local de memória do usuário final. Da mesma forma, estou considerando uma estrela flutuante b. Então, isso é considerado como um ponteiro para uma localização de ponto flutuante. Então isso é um ponteiro para uma bóia. Em seguida, car star c. Portanto, este é um indicador para o tipo de dados do caractere. Ok? Então, aponte para um local de memória. Assim, você pode escrever duas dicas diferentes, ok? E você deve usar no ponteiro de provocação apenas dois pontos no local de merecimento da memória. Da mesma forma, ponteiro de ponto flutuante para apontar a localização do ponto flutuante, e assim por diante. Agora, vamos escrever um programa para basicamente identificar o endereço e exibir o conteúdo dentro do ponteiro. Ok, então primeiro, incluirei o arquivo de cabeçalho aqui. Então isso é stdio.h. E dentro da função principal, estou considerando uma variável. Dentro da função principal. Estamos considerando uma variável como número. Então, deixe-me considerar que o número é igual a algum valor como 50. Agora podemos considerar uma variável de ponteiro na estrela p. Portanto, essa é uma variável de ponteiro. Agora P é igual ao endereço do número, um ponteiro contendo o endereço de outra variável. Ok? Agora podemos imprimir o endereço dessa variável p. Ok? Então, deixe-me imprimir esse endereço da variável ISA. Portanto, você pode usar uma representação int não assinada. Não, ok, porcentagem. Você imprime esse endereço. E você também pode usar sua representação de valor. Então esse é o valor de b. Então, nosso valor apontado por p, ok? Então, esse valor apontado pelo ponteiro p está usando pessoa-dias D, Você pode imprimir, que é uma estrela p. Então isso imprimirá o valor apontado pelo ponto B. Ok? Assim, você pode exibir o endereço e também o valor usando o ponto a b. Ok? Agora, vamos ver quais são as vantagens de usar esse ponteiro. Ok? Primeiro de tudo, você pode usar esse ponteiro, ok? Com os outros conceitos também. Vantagens fora do ponto. O primeiro é usar o ponteiro. Você pode reduzir o código, ok? Então, isso reduzirá o código que estamos escrevendo. E também melhorará o desempenho. Isso melhorará o desempenho. E você verá essa melhora no desempenho, especialmente na linguagem C, durante a recuperação. sequências de caracteres estão recuperando ou acessando árvores. Ok? Além disso, esses ponteiros são usados junto com outros conceitos como estruturas e funções. Então, todos esses tópicos, então vamos usar essas dicas, ok? Então, isso significa que sempre que você quiser acessar os elementos de uma matriz, uma forma é acessá-la por meio de seu índice. Outras formas de acesso com a ajuda de um ponteiro que aponta para o endereço base da matriz. Ok? Portanto, agora outra vantagem é que geralmente a declaração de retorno em C pode retornar apenas um único valor. Sempre que quiser retornar vários valores de uma função, você pode usar um ponteiro. Basicamente, você pode retornar um ponteiro e, usando esse ponto, acessar os locais de memória subsequentes. Portanto, posso escrever aqui sempre que você quiser retornar vários valores ou vários valores de uma função. Ok? Então você vai usar o conceito de ponteiros. E também sempre que você usar esse ponteiro, ele permitirá que você acesse qualquer local de memória em todo o computador. Ok? Portanto, isso nos permitirá acessar qualquer local de memória usando o ponteiro. Ok? Então, agora vamos escrever como eu sou o programa Bill usando ponteiros. Ok? Então, primeiro, vou realizar a troca de dois números sem usar a terceira variável, mas vou usar o conceito de ponteiros aqui. Ok? Então, primeiro, inclua o arquivo de cabeçalho aqui. Dentro da função principal. Primeiro, podemos considerar que as variáveis são iguais a dez, b é igual a 20. Agora, vamos considerar variáveis de ponteiro aqui, estrela b1, que pode conter o endereço de j, n estrela v2 para encontrar o endereço de B. Ok? Então, agora você pode realmente exibir o conteúdo antes dessa embalagem. Antes de realizar a troca, você pode exibir o ponteiro de conteúdo por P1 e P2. Portanto, isso pode ser escrito como antes do Swap. Ok? Comece p1 igual a usar a porcentagem d. Ok? E também estou considerando uma estrela, v2 é igual à redução percentual. Então, aqui estou escrevendo o conteúdo star b1 e a estrela. Nós os condenamos. Ok? Agora vamos realizar a troca, usando, ok, sem usar nenhuma terceira variável diretamente, você pode executar com a ajuda desses ponteiros. Então a estrela p1 é igual à estrela, estrela p2. Ok? E então aqui podemos escrever que a estrela p2 é igual à estrela p1 menos p2. E também a estrela p1 é igual à estrela p1 menos p2. E, finalmente, após a troca, você pode exibir o conteúdo assim, imprimir f, a troca. Agora você pode exibir esse conteúdo de estrela b1. Além disso, inicie o conteúdo que você pode exibir aqui. Então essa será a estrela t1, estrela p2. Ok? Então, após essa sequência de ações, claramente o conteúdo de UEN, conteúdo de b, será trocado por ele. Então, deixe-me mostrar como isso vai funcionar aqui. Então, primeiro, você pode mostrar aqui e o valor inicial é válido. Em seguida, abelhas e outra variável, que inicialmente mantém o valor de 20. Agora P1 é um ponteiro que está segurando uma ou outra Sophie. Suponhamos que a Sophia seja dos anos 2000 e o endereço de b seja 3.000. Ok? Portanto, se for esse o caso, P1 será um ponteiro contendo o endereço Sophia, o que significa 2000 localização de memória. Portanto, P1 apontará para esse local de memória. Agora, P2 é outro ponteiro chamando o endereço de B, que é a localização de 3.000 memórias. E P2 está apontando para este. Agora a estrela p1 é igual à estrela p, estrela p dois, o que significa que a estrela t1 está apontando basicamente para esta localização, certo? Agora, isso é atualizado adicionando a estrela P1 contida com uma estrela. Nós fazemos conteúdo. O conteúdo da estrela P1 é dez e o conteúdo da estrela P dois é 20. Então, dez mais 20 serão 30. E isso será armazenado dentro desse local, que é apontado por P1. Então a estrela p2 é igual à estrela p um menos a estrela p p2. Portanto, a estrela P1 está contida nesse local, que é 30 menos uma estrela P2, que é 2030 -20, o valor será dez, e isso será armazenado dentro desse local de memória , apontado por P2. E finalmente, a estrela p1 é igual à estrela p um menos p estrela p, estrela P1 é 30 e a estrela p2 é 1030 menos dez será 20. E isso será armazenado dentro desse local de memória , apontado por p um. Portanto, isso deve ser modificado para 20. Finalmente, estamos exibindo após a troca, então inicie o conteúdo em P1 e comece com para continuar. Então, depois de trocar a estrela p quando o conteúdo é nosso 20 e o conteúdo da estrela p2 é dez. Então, mas antes de trocar, você pode ver que o conteúdo da estrela P1 apontará para EA e iniciará P2, o que significa que o ponteiro P2 apontará para b, ok? Então, isso é 10,20 inicialmente. Mas depois de realizar a troca, é 20,10. Ok? Assim. 3. Aritmética de ponteiro: Agora vamos trabalhar agora em como a operação de incremento do ponteiro, operação de endpoint ou decremento funcionará. Ok? Então, primeiro, considere uma variável aqui, então seu valor é 50. E estou considerando outro ponto de estrela variável p aqui. Então P é igual ao endereço de x. Ok? Agora você pode trazer aqui o endereço correspondente para x, que nada mais é do que P. Então imprima endereço f como nosso endereço dentro de IP, endereço, que está armazenado dentro de B. Ok? Assim, você pode exibi-lo. Mas eu penso assim, r de x César. Então você pode usar uma porcentagem de você para exibir esse endereço e assinar, ok. Então B, você pode exibir. Agora, vamos fazer isso e ver o resultado do asfalto. Você pode ver que esse é o endereço atual de x. Então esse é o presente. Eu pressiono, Ok. Agora eu quero incrementar esse p em um local, ok? Portanto, P igual a P mais um representa o incremento em um local de memória. Ok? Portanto, o endereço é igual ao endereço mais o incremento em um local de memória. Esse local de memória é igual ao tamanho do InDesign. Ok? Então, P é incrementado tamanho y em um teaser. Ok? Ou posso dizer que querer crescer no deserto é incrementado em um em cada dois lados de merecer alguém. Se eu estiver tomando p mais dois, então isso representa fazer aqueles olhos do InDesign, ele será incrementado. Então, finalmente, quando você quiser exibir aqui, após a operação de incrementação, tudo bem. O incremento no endereço está ok. Então, usando a pessoa que paga você, você pode exibir o endereço aqui. Ok? E você pode começar a exibi-lo. Agora, vamos executar esse código e ver o reservado. Ok. Então, se você quiser, vamos girar uma única linha. Você vai observar que esse é o endereço de x, certo? Ok. E depois de realizar uma operação de incremento, eu pressiono é exatamente incrementalmente em quatro porque o quatro representa o tamanho de um no local da memória diesel. É por isso que é incrementado em quatro. Agora, se você considerar incrementado em quatro, por exemplo , isso representa que B tem que ser incrementado em quatro nesses locais de memória, o que nada mais é do que quatro no tamanho de int teaser, ele é incrementado em quatro no tamanho de int. Então, depois de incrementar os endereços, você pode imprimir aqui. Então, vamos executar esse código e ver a reserva. Então, inicialmente nesses dois últimos dígitos, você pode ver o dinheiro economizado nos últimos dois dígitos, 80. E aqui os dois últimos dígitos são 96 porque a diferença é 16. Ok? Isso indica claramente que estamos incrementando o endereço atual em quatro locais de memória. E cada local de memória é igual a esse tamanho de int. O tamanho do número inteiro é de quatro bytes. Quatro em quatro é igual a 16. É por isso que ele é incrementado em 16. Ok? Agora, da mesma forma, vamos considerar uma operação de decréscimo, ok? Então, se você quiser considerar a operação de decremento, tudo bem. Então, vamos modificar aqui para diminuir a operação. E também aqui vou executar p igual a p menos um. Então, aqui, P será diminuído em um até o tamanho de int. P é igual a p menos um representa P será diminuído em um em tamanho em merecer. Após a incrementação, o endereço ficará assim. Ok? Então, vamos executar esse código e ver a reserva. Você pode observar que o endereço de x contém os dois últimos caracteres. Você pode ver o Haiti agora diminuído em uma posição, o que significa um local de memória igual ao tamanho do número inteiro, que é de quatro bytes. Portanto, isso deve ser diminuído em quatro. Então, o valor se torna 76 assim. Ok? Então, agora, por exemplo se você quiser diminuir em quatro locais de memória, p é igual a P menos quatro, o que significa que P será diminuído em quatro tamanhos de entrada de int. O tamanho do indutor será de quatro bytes. Quatro em quatro é igual a 16. Portanto, p deve ser diminuído em 16. Ok? Então, vamos ver aqui. Então isso é 80 e isso é 64, últimos dois dígitos, ok? Lembrando que todos são iguais. Portanto, está claramente diminuindo em 16. Ok? Portanto, é assim que incremento e decréscimo do ponteiro operações de incremento e decréscimo do ponteiro ocorrerão. 4. Ponteiros como parâmetros para funcionar: Agora estamos considerando uma chamada por implementação de referência ou passando o endereço da variável como um parâmetro para a função. E você pode usar para manter o endereço da variável. Ok? Então, vamos considerar realizar a soma simulada de dois números dados. Então, vamos considerar uma vírgula b são as duas variáveis. Agora podemos ler os valores correspondentes dessa variável e passá-los como parâmetro para a função. Ok? Então, agora vou solicitar que o usuário insira quaisquer dois valores. E usando a função de scanner, podemos ler esses valores como pessoa-dias, a pessoa pega o endereço de uma vírgula b. Ok? Agora, precisamos passar essas variáveis como parâmetros para uma função para que ela calcule a soma desses dois números. Portanto, considerarei find summons o nome da função, passando duas variáveis e preservando um endereço de vírgula dos parâmetros S. Nesta função, estou usando o tipo de retorno tão amplo para que eu possa exibir o resultado dentro dessa função. Usando o ponteiro. Estamos realizando aqui o PTR com uma vírgula em estrela PTR também. Portanto, dentro dessa função, podemos calcular um resultado adicionando o conteúdo que é apontado por PT R1 e R2. Porque o PTR um guardará o endereço de e o P DR2 manterá o endereço de B. Ok? Agora considere outra variável chamada aureus, que é uma variável de resultado. Agora aureus é igual à estrela p d R1 mais a estrela PTR dois. E, finalmente, você pode imprimir o resultado. Portanto, o resultado da adição do Domingo de Páscoa é o corte e você pode exibir o valor de RES. Ok? Então, vamos executar esse código e as reservas de prata inserem quaisquer dois valores, 12,23. E você vai observar que a sobremesa depois adicionar é 35 mais 23s. Defina. Então, é assim que você pode passar o endereço da variável como parâmetro para a função calcular e exibir o resultado. Portanto, o subcálculo é feito com a ajuda dessas variáveis de ponteiro que atualmente contêm o endereço das variáveis que são passivas na função principal. Ok? Portanto, isso também é um exemplo de implementação de chamada por referência. E isso também é considerado como o uso de ponteiros como parâmetro para uma função. Ok? 5. Ponteiro para uma função: Agora, vamos considerar nosso conceito de ponteiro para uma função. Ok? Portanto, você também pode usar um ponteiro para apontar a função IF. Assim como usamos uma variável ponteiro para ponteiro, semelhante a essa, você também pode usar uma função ponteiro a ponto IF em C. Ok? Portanto, declarar a variável do ponteiro é semelhante à declaração da função. Então, deixe-me mostrar um exemplo aqui. Eu quero basicamente implementar a função principal agora. Ok? Portanto, dentro dessa função principal, considerarei uma variável chamada Variável reservada. E neste ponto em que eu quero apontar a estrela PTR, eu queria apontar para outra função. Então, vamos supor que a declaração da função é adição inicialmente é o nome da função, e esta é a declaração do protótipo da função. Ok, então agora como você declara um ponteiro que está apontando para uma função? Portanto, ele deve ser declarado da mesma forma que escrevemos a função. Ok? Então comece o PTR, ok? Assim. Agora você pode usar este PDR de 2 pontos para pressionar outra função que é VTR é igual a I dress ou o nome da função é adição. Ok? Agora, precisamos extrair a reserva. A reserva é igual a, ok? Então você está basicamente chamando a função. Geralmente, você chamará a função e seus resultados correspondentes devem ser armazenados dentro de um resultado variável. Mas agora, você vai absorver um PDR como o ponteiro que aponta para a função chamada adição. Então, escrever isso nada mais é do que chamar uma função chamada edição. Ok? Portanto, isso equivale a chamar uma função de adição aqui. Agora, depois de chegar ao deserto, você pode exibi-lo preservado. Ok? Portanto, essa soma é usada com base na pessoa, deveria ser. Você pode exibir o resultado. Agora vamos implementar essa função de adição. Ok? Então, aqui, como eu já declarei o protótipo ou declaração da função , posso implementar aqui. Agora, dentro dessa função, basicamente lerei as duas variáveis e os valores correspondentes. Eu vou fazer algumas. Ok? Então essas duas variáveis estão em B, ok? E solicitarei claramente que o usuário insira quaisquer dois valores. E usando a declaração scan f, você pode ler isso. Os dias pessoais são dias pessoais. Eu pressiono a vírgula b. E, finalmente, você pode retornar a mais b reservado. Finalmente, você pode devolver um plus b mereceu. Então, vamos executar e ver a reserva para inserir quaisquer dois valores que eu esteja inserindo. primeiro valor está em, um valor x é 20 e você pode ver o resultado, a soma é 30. Então, como isso é obtido é claro, em vez de chamar essa função de adição diretamente, estamos usando um ponteiro para manter o endereço da função de adição. Ok? Usando pointer, estamos chamando essa função e extraindo a reserva e armazenando-a dentro de uma variável chamada result. E então estamos exibindo isso. Ok? Portanto, esse é o conceito de ponteiro para uma função em C. E isso produzirá reservas de caracteres. Assim, você pode inserir quaisquer dois valores, como seis, e isso produzirá o resultado como oito. Ok? 6. Acessando a string usando ponteiros: Agora, neste exemplo, veremos como acessar uma string usando o ponteiro. Ok? Então, considere a função principal. Dentro dessa função principal, você está considerando um caractere que é uma string. Então, isso é STR desligado é igual a olá. Olá é essa string. Agora, considere também o PDR em estrela. Pdr é o ponteiro apontando para o endereço base da string, o que significa sempre lembrar nome da string está representando o próprio endereço, nosso endereço base da string. Portanto, você precisa usar assim p d ou igual a USTR, o que significa diretamente USTR está indicando o endereço em si, então o PDR manterá esse endereço. Agora, usando o PDR, você pode exibir o conteúdo que é apontado por este VTR. Ok? Portanto, usando while loop, você pode exibir esse conteúdo. Embora a estrela PTR não seja igual ao caractere nulo. Star PTR não é igual a um caractere nulo. Então, nesse caso, você pode trazer conteúdo PTR em estrelas. Portanto, a porcentagem d inicia o PTR. E você pode usar o PDR para incrementar para a próxima posição. Então, isso será PTR mais incrementos em uma posição e passar para o próximo local , começar a imprimir esse contendor e passar para o próximo local, assim. Então, vamos executar esse código e ver a reserva. Ok, aqui, você deve usar dias pessoais. Veja, caso contrário. Ele exibirá seu valor ascii correspondente. Ok? Portanto, os dias pessoais buscam entender exatamente o personagem. Então, a mesma string, hello, é exibida. Vamos supor que você tenha uma string como hello space world. Você poderá acessar o hello space world usando este código. Você pode ver a reserva Hello Alice exibida. Dessa forma. Você pode acessar o conteúdo da string com a ajuda de uma variável de ponteiro. 7. Comparação de cordas usando ponteiros: Agora vamos implementar comparação de strings usando um conceito de ponteiros. Então, vamos considerar que um STR r1 contém hello e STR contém void. Agora eu quero fazer uma comparação entre essas duas cadeias de caracteres com os ponteiros. Então, deixe-me considerar uma variável inteira que pode conter a reserva comparativa. E vou chamar a função, que é minha função STR CMP, ignorando os parâmetros STR one e STR QS para essa função. E, finalmente, vou mostrar aqui, reserve essa sequência. Comparação. Reserva É pessoa, é B. Então, vamos exibir o resultado aqui. Ok? Agora, vamos implementar essa função que é minha função STR CMP. Então, usando ponteiros, deixe-me considerar. Um é o ponteiro para apontar para a string 1.2, assim como o ponteiro para a cadeia de caracteres ponto-a-ponto. Ok? Então, como você obterá a comparação de cordas do Brasil? É simples quando você basicamente precisa comparar duas cadeias de caracteres e identificar a diferença do valor ascii entre o primeiro caractere não correspondente. Ok? Então, para esse propósito, eu comparo as duas strings , desde que sejam iguais com a ajuda de while loop. Ok? Primeiro, vamos supor que uma estrela seja, S1 é igual à estrela no início, S1 é igual à estrela é dois. E você também precisa conferir aqui. A estrela é S1 não deve ser igual a nula. Ok? Portanto, isso não é igual a nulo. Ou eu posso dizer caractere nulo. Tudo está bem. Então, ou isso não é nulo. Nossa estrela é dois não é igual a nula. Ok? Portanto, a primeira condição é o caractere localizado nos sites STR um é igual ao caractere localizado em STR dois, que é ponteiro por ponteiro S1 e S2. E também considere s1, qualquer ponto s1 que esteja apontando não é igual a nulo. Ou apontar S2 não é igual a nulo. Somente nesse caso, prosseguiremos. Ok? Então, nesse caso incrementaremos o S1 para a próxima posição e também como dois para a próxima posição. Portanto, S1 será incrementado e S2 será incrementado. Agora, aqui, vou retornar a diferença entre S1 e S2. Então, aqui, a estrela de retorno é S1 menos uma estrela é duas. Então, isso lhe dará a diferença entre estrela s1 e o início, pois nada mais é do que caracteres não correspondentes, a diferença correspondente. Ok? Então, ou s1 não é nulo ou S2 não é nulo, então só isso acontecerá, esse loop específico é executado, em execução, ok? Então, no geral, você pode ver quando essa condição é verdadeira, então só ela funcionará, certo? Então isso deve ser verdade e isso também deve ser verdade. Então, o que significa que os caracteres devem ser iguais ao mesmo tempo. Qualquer uma dessas strings não está atingindo o valor nulo. Ok? Então, ponto, você pode ver S1, ponteiro e ponteiro incrementando para as próximas posições. E sempre que você descobrir que há um caractere não correspondente ou ambos estão chegando a nulos. Nesses casos, você precisa encontrar imediatamente a diferença entre esses personagens, ok? Então, esses personagens não correspondentes. Vamos executar esse código e ver reservado. Você pode ver que o resultado da comparação de strings é -15 porque estamos comparando hello com world. Os dois primeiros personagens que não coincidem são atingidos diretamente em U e W. Ok? Então h menos w, a diferença é claramente de 15 caracteres. E esse H vem primeiro quando comparado com w. É por isso que h menos w levará a -15. Portanto, o resultado é mostrado como -15. Ok? Então, vamos supor que eu queira modificar essa string como x, y zed. E isso também diz x, x, z. Agora vamos executar esse código e ver o y menos x reservado produzirá um. Ok? Assim. Suponha que eu esteja dando isso como x, x, z, e isso é x, y, z. Nesse caso, você obterá um resultado como menos um. Suponha que, se as cadeias modais forem iguais, basicamente x, y, z e x y, z. Nesse caso, você obterá o resultado como zero. Ok? 8. Concatenação de cordas usando ponteiros: Agora, neste vídeo, mostrarei como realizar a operação de concatenação de strings com a ajuda de ponteiros. Então eu perco o conceito de ponteiros para realizar essa operação de concatenação de strings. Além disso, executarei essa concatenação de strings em uma função separada. Ok? Então, deixe-me escrever aqui concatenação de strings usando ponteiros. Então, primeiro vou incluir o arquivo de cabeçalho. Sim, o TDI pegaria. Agora, dentro da função principal. Considere algumas sequências aqui. Portanto, considere STR um igual a hello e STR igual a void. Portanto, considere um tamanho maior para STR one porque eu quero concatenar dentro do STR one. Então, isso mesmo. Vamos considerar que STR um é nosso 20, por exemplo , e então eu estou concatenando o conteúdo de SGR, STR um. Então, deixe-me chamá-la de função aqui, que é minha função STR CAP. E vou passar STR one karma STR como parâmetros para essa função. E mais tarde, podemos exibir o conteúdo do STR one. Ok? Então, seja um dia de boa pessoa, sim. Você pode exibir como conteúdo DR1. Agora vamos implementar essa função My STR CAD. Então, vamos considerar a implementação dessa função. Onde eu considero algumas dicas Less. Suponhamos que eu esteja considerando que a estrela é dois e a estrela é S1 aqui. Dentro do meu STR CAD. Agora eu quero ir para o final da corda que você pode observar para o STR one, estou usando um guisado como ponteiro. Ok? Então, primeiro você tem que usar esse S22 que eu negocio até o final dessa string. Usando while loop, você pode hidratar essa estrela S2 não é igual ao caractere nulo. Então, nesse caso, você simplesmente incrementa isso de dois por um. E agora você precisa verificar se este está bem. Então, primeiro, sim, quando ele já está apontando a corda dois para lá. Portanto, você precisa acessar caractere por caractere e anexá-la a essa string, STR, uma string apontada por S2. Portanto, isso pode ser feito assim usando while loop. Vou verificar assim. A estrela é S1 não é igual ao caractere nulo. Se essa condição for verdadeira, podemos copiar e também incrementar. Em uma única declaração. Estou lidando com isso. A estrela S é dois mais mais é igual à estrela s1 mais, mais. Ok? E, finalmente, depois que o enfrentamento inteiro for concluído, você só precisará colocar explicitamente um caractere nulo. Então, o que pode ser estrela é dois é igual ao caractere nulo. Ok? Assim. Agora, vamos executar esse código e ver o reservado. E veremos que a string atualizada é hello world. String one é a palavra de olá. Então, inicialmente, a string um contém apenas Hello, string dois contém world. Agora, depois de realizar a operação de concatenação de string, que é implementada usando ponteiros com string1, é apontada pelo ponteiro de caractere S2 e a string dois é ponteiro por caractere S1. Para nós, passamos para o final da primeira corda com a ajuda de estupendos. Mais tarde, começamos a lidar com o auxiliar de s1 ponto, caractere por caractere, para o local, enquanto dois apontam. Então, finalmente, estamos atribuindo um status a um caractere igual a nulo, que significa que estamos indicando o caractere nulo no final da string após a concatenação. Portanto, agora podemos acessar o conteúdo do STR one, que contém o resultado concatenado de STI R1 e R2. Então é assim que vai funcionar. 9. Encontrando o comprimento da corda usando ponteiros: Agora vamos calcular o comprimento dessa string usando a variável de ponteiro. Então você pode observar que eu usei um nome de string como HelloWorld e star. Ptr é a variável do ponteiro está apontando para o endereço base, que é STR. Agora, você pode começar a contar o número de caracteres dentro dessa string, que é o comprimento dessa string. Você pode considerar n igual a zero representando o comprimento da string. Agora, usando while loop, você pode tratar aqui enquanto o PTR em estrela não é igual ao caractere nulo. Então, se for esse o caso, você pode incrementar o comprimento da string, ok? Porque você precisa contar cada caractere dentro da string. Então, alien plus, plus e também Moody's PDR para a próxima posição. Depois de contar o primeiro caractere, ele tem que ir para o segundo caractere. Ok? Assim, depois que todos os caracteres forem contados, você poderá exibir o comprimento da string aqui. Então, comprimento da corda, facilidade. Os dias pessoais deveriam ser estranhos. Usando uma variável alien, você pode exibir o comprimento da string. Agora, vamos executar esse código e ver que o comprimento da string é 11. Então, claramente, há um total de 11 caracteres nessa sequência, incluindo espaçador, o total de caracteres limão está lá. É assim que você pode encontrar o comprimento da corda. Ok? Você também pode tentar passar esse parâmetro STRS para a função e identificar o comprimento da string e de outra função. Então, deixe-me te mostrar aqui. Portanto, PTR é igual a STR. E vamos implementar uma função separada para encontrar o comprimento da string. Então, eu escreveria minha própria função, que é a alienígena MISTRA. E aqui vou usar a variável do ponteiro como estrela, ponteiro PTR. E você vai ver se PDR é igual a STR. Aqui. Como estamos passando um ponteiro de caractere, ele também deve ser um ponteiro de caractere. Ok? Então a ideia é considerar apenas uma variável chamada EN, ok? Para encontrar o comprimento da corda. E isso é igual a, chame essa função de minha função alienígena STR. E passe esse STR como parâmetro. Ok? Como tudo o que estamos computando na outra função, você não precisa usar esse ponteiro nessa função. Então, novamente, isso é igual ao meu alelo STR e fora de STR, estou passando um parâmetro STRS para minha função STR Len. E, finalmente, você pode exibir o comprimento dessa string aqui. Impressão do comprimento da corda. O comprimento da corda está aqui. Você pode exibir o comprimento da string usando a variável EN. E você precisa implementar essa função MISTRA LEN. Então, com a ajuda de ponteiros, isso é ponteiro de caracteres. Então, vamos considerar outro indicador de personagem, como car star m. Ok? E, inicialmente, considerarei que temp é igual ao modo PTR, esse PTR e temper apontando para o endereço base da string STR. Agora, eu gostaria apenas do ponto do templo. Portanto, embora essa estrela m não seja igual ao caractere nulo, podemos tratar isso aqui. Assim, você pode mover esse ponteiro de temperatura para a próxima posição. Ok? Então, como apenas uma linha, você pode pular esse M mais, mais. Ok? Quando a temperatura da estrela estiver apontando para o caractere nulo, finalmente, você poderá retornar aqui. **** menos PTR. Como sabemos, localização do personagem ocupará apenas um byte. Ok? Portanto, temp agora está apontando para o último local na string, e o PDR já está apontando para o primeiro local na string. Então isso vai te dar a diferença, certo? E isso se tornará o comprimento da corda. Ok? Então, vamos executar esse código e ver o resultado. O comprimento da string é menor que. Então. Isso é uma corda, certo? Olá espaço, mundo, no total 11 personagens estão lá. E somos capazes de obter o mesmo resultado. Ok? Então, é assim que você pode passar um nome de string como parâmetro para a função e usar o ponteiro de caracteres para apontar para essa string e calcular o comprimento da string aqui. Ok. 10. Ponteiros e arrays 1D: Agora discutiremos sobre ponteiros e somatórios unidimensionais. Se você observar esse conceito de ponteiros e matrizes unidimensionais. Primeiro, mostrarei como esse ponteiro pode ser usado para acessar o conteúdo dentro dessa matriz unidimensional. Ok? Então, sempre que escreva de forma mais clara. Agora, suponhamos que aos cinco anos de idade. Ok? Então você vai observar que haverá localizações de memória phi contíguas. Então você pode ver que este é um RNA chamado yay. Ok. Isso está integrando o primeiro local, o joelho fora do joelho. Este é o seu 234 assim. Agora, usando o ponteiro, você pode acessar o conteúdo dentro de cada um desses locais. Ok? Suponhamos que eu queira armazenar em tempo de compilação a lista de valores dentro dessa matriz. Suponha que, se eu armazenar assim, 102-030-4050. Então, nesse caso, esses são os valores que estão armazenados e serão armazenados aqui. 20 são armazenados aqui, 30 são armazenados aqui, 40 são armazenados aqui e 50 serão armazenados aqui. Agora, considere o endereço base. Suponhamos que esse seja o endereço base da matriz, que é de 2000. E estamos em 2004, pois no deserto está ocupando quatro bytes. Estamos em 2008, estamos em 2012 e estamos em 2016. Esses são os endereços correspondentes. Agora, usando o ponteiro, podemos realmente apontar para o endereço base de toda a matriz. Então, isso pode ser indicado, vamos supor que usando uma variável de ponteiro. Então, considere na estrela PTR. Portanto, PTR é a variável de ponteiro que estou usando. Esse PDR pode apontar para o endereço base da matriz, endereço de a de zero, por exemplo, você pode armazenar como este endereço de a de zero. Ou simplesmente EH, selfie está representando o endereço base. Ok? Agora, quando você executa essa ação, PDR igual ao endereço aqui de zero, ele considerará essa variável de ponteiro, corredor, PTR. E ele armazenará o endereço dos principais centros de toda a matriz. Você está sem endereço correspondente, que é dos anos 2000. Isso armazenará 2000. Npr apontará para esse local de memória. Ok? Agora, usando o PTR, você pode acessar cada elemento dentro da matriz. Então, para esse propósito, vou pegar outra variável de loop chamada i. Então, vou escrever uma amostra para loop para criar um acesso a cada elemento dentro dessa matriz com a ajuda de um ponteiro. Então, eu é igual a zero. E então considere I menor que cinco porque há cinco elementos dentro da matriz. Agora, usando a declaração print f, podemos exibir cada um desses elementos. Imprima f, porcentagem d, barra t. Agora eu mostro que PTR está apontando para esse local. Como posso obter o elemento? Então, quando eu quero dizer PTR, eu tenho os anos 2000. Quando escrevo um PTR em estrela, obtenho conteúdo dentro 2000 locais de memória, que são dez. E depois disso eu quero acessar esse conteúdo chamado 20, depois 30, depois 40, depois 50, assim. Então, nesse caso, eu valorizo, vamos usar esse valor atualizado de I, certo? Comece menos com o PR. Eu começo com DR. Place. Então, esse valor I será tratado a partir de I igual a zero até I igual a quatro. E esta é uma estrela do PTR lugar I. Então, quando eu começo com PDR mais I, isso é na verdade equivalente a, ok. Então você vai observar uma estrela de VTR menor que zero. Isso é equivalente a escrever u de zero. Ok? Quando você considera que I é igual a um, isso se tornará estrela de PTR mais um. E isso será equivalente a um. Ok? E escrever estrela de PTR L2, onde I é igual a dois, neste caso significa energia igual deitar dois e assim por diante. Da mesma forma, você pode ver aqui a estrela do PTR mais quatro. Isso não é nada além de quatro, ok? Assim. E se houver n número de elementos armazenados dentro da matriz. Então, nesse caso, você pode simplesmente escrever menos estrela em VTR. En é igual a e off. Ok? Ou pode ser K simplesmente PDR mais k é igual a a de k desse jeito. Ok? Agora, deixe-me basicamente ler todo o conteúdo da matriz com a ajuda dos próprios ponteiros e exibir o conteúdo da matriz unidimensional. Então, primeiro, pegue o arquivo de cabeçalho. E dentro da função principal, vou considerar uma matriz aqui. Ok? Portanto, considere um aumento e de 20, por exemplo e eu estou usando duas variáveis em um interior não corante e você pode armazenar o número de elementos ou o comprimento da matriz. Para esse fim, você pode incluir esta declaração. O número de elementos é simplesmente inserir o tamanho. Portanto, usando a declaração scan f, você pode ler esse tamanho específico em qualidade variável e endereço com frequência. Agora, solicitaremos ao usuário com Scully que nos guie a inserção desses muitos elementos. Aqui você pode perguntar a porcentagem de gênero são os elementos, o que significa n elementos. Estamos pedindo que o usuário entre. Agora, usando for loop, vou para o eixo, ok? Então, diretamente aqui, eu nem estou fazendo questão de usar o Airy, só estou acessando aqui. I igual a zero, I menor que n I mais mais. Agora podemos armazenar usando a instrução scan f. Então, esta é uma varredura dos dias do ano, mais eu ok? Então, estamos armazenando dentro da matriz. Agora, quando você quiser exibir de forma semelhante usando print f, basta dizer exibindo elementos da matriz. E depois disso, você pode simplesmente usar isso para loop. I igual a zero I menor que n I mais mais. E usando a declaração print f, você pode exibir como se essa pessoa fosse a estrela D de um plus se o conteúdo dentro desse endereço específico for obtido. Você pode fechar essa função principal. Portanto, esse código é basicamente para leitura com o conceito de ponteiros. E isso está usando o conceito de ponteiros. Estamos exibindo o conteúdo de uma matriz unidimensional. Ou você pode pegar diretamente outro ponteiro e apontar para esse endereço base da matriz e começar a titular. Ok? Então, de qualquer forma, você pode fazer isso. Então, deixe-me mostrar um exemplo em que vou modificar e mostrar maneiras diferentes. Portanto, isso é considerado acessar o conteúdo da matriz. Aqui. Na função principal. Vou adicioná-lo aqui. Deixe-me eliminar 20 vírgula n vírgula i. Agora vou solicitar que o usuário insira basicamente o valor n. Então, depois de inserir valores usando a instrução do scanner, você pode lê-los na variável in. Ok. Posteriormente, você pode perguntar ao usuário que a pessoa D são os valores. E exatamente você precisa obter um número par de valores. Ok? Em seguida, usando for loop, você pode começar a armazenar esses valores dentro dessa matriz com a notação de ponteiro. Então, usando a declaração scan f, você pode escrever como essa pessoa dias de d. Simplesmente um plus I. Isso indica que um mais I não é nada além do endereço do seu arquivo. Então você pode ver que um plus cy é equivalente a phi. Ok? Exatamente assim. Agora, aqui. Da mesma forma, eu quero exibir esse conteúdo. Portanto, usando a impressora, você pode simplesmente exibir os elementos da matriz. E novamente, usando for loop aqui. E em vez do scanner, você precisa usar a instrução printf para exibir o conteúdo. dias de uma pessoa surda, a estrela de um plus I. Isso fornecerá o conteúdo dentro desse local de memória. E se eu escrever assim, isso representa EOF, significa que é equivalente à estrela de mais I. Comece com mais à direita, é equivalente a a ou PHI. Então, vamos executar esse código e ver o resultado. Ok? Então, aqui temos que usar um ponto e vírgula. Digite o valor n, estou inserindo os valores cinco. Agora, ele solicitará que você insira cinco valores. Suponhamos que 1020304050 sejam os valores que eu dei. Você pode ver que os mesmos valores estão sendo impressos, ok? Então, vou usar aqui uma pessoa por dias, quatro dias para que haja algum espaço ao exibir os elementos. Então, desta vez, inseri um valor de 6.000. Portanto, considere valores diferentes, como 12, 304-203-5663 para P2. Ok, esses são os seis elementos que eu dei. Agora você pode ver a exibição de nossos elementos 1234, 2035, 0660, 3402. O mesmo. Então, em vez de escrever estrela de a mais i, ok, você pode escrever diretamente e de I. Esta é uma notação geral que usamos ao trabalhar com isso é ok. Então, desligue, você está desligado. Deixe-me mostrar aqui em uma corrida, esta é a notação que usamos. Suponha que n valores para 122.345,56, veja o mesmo valor, então o spread. Ok? Agora, em vez de usar a sigla diretamente, você também pode usar ponteiros. Um ótimo ponto, um ponteiro inteiro. Ok? Você pode usar esse PTR para apontar. Eu me visto do zero. Agora, usando o ponteiro, você pode acessar tudo aqui. Basta escrever PTR mais I. E aqui, em vez de escrever seu arquivo, você pode escrever o PDR para começar. Abençoe. Ok. Então, isso também funcionará. Desta vez, dei um valor de n igual a cinco. Os elementos estão em 2030, 40,50. Novamente, veja a exibição de nossos elementos 102-030-4050, assim. Ok? 11. Ponteiros e arrays 2D: Neste vídeo, discutiremos sobre como acessar uma matriz bidimensional usando o conceito de ponteiros. Portanto, são ponteiros e matrizes 2D. Isso são matrizes bidimensionais. Ok? Agora, se você considerar aqui, geralmente, a NRA. Suponhamos que eu esteja considerando uma matriz que é bidimensional , como 23. Isso denota mescalina Eric, ou que contém quantas Rosa? Portanto, há duas linhas e três colunas. São duas linhas e três colunas. Então, número da linha, e então esses são todos números de coluna, certo? Ok? Então, se você olhar para esses locais, isso representa o zero zero do seu escritório, ok? E isso está representando seu 01. Esse também é o zero total. Isso está representando um 0 de 10, e este é o seu 11. Esses são os 12 antigos, assim. Agora, quando eu quero armazenar um valor nesse local específico, geralmente escrevemos o endereço, então todos por zero. Ok? Isso é claramente equivalente a escrever o ano de início mais zero mais zero usando ponteiros, ok? Suponha que, se você quiser exibir esse candidato, ou seja, o conteúdo desativado com zeros e zero que você deseja exibir usando a instrução printf. Então, seu equivalente está em ponteiros. É uma estrela, comece com EA mais zero mais zero. Ok? Então, esses dois são equivalentes. Da mesma forma, esses dois são equivalentes. Agora, deixe-me mostrar-lhe aqui claramente. Quando me refiro à representação , como suponho, é o Adi, ok? No, às três, no mesmo sótão. Ou este ano representa tudo bem? Então, quero dizer aqui, ele realmente representa um ponteiro para a primeira linha. Ok? Portanto, isso representa o ponteiro diretamente para a primeira linha. Então, quando eu escrevo k mais i, isso representa um ponteiro para o IEP, ok? Ponteiro para eu sei, por exemplo se eu escrever estrela aqui mais I. E isso representa um ponteiro para o primeiro elemento no olho e através, ok? Logo no primeiro elemento de I, jogue alguém se eu escrever, comece aqui, mais I mais j. Então, isso representa um indicador para o I entregue no olho. Ok? Ponteiro para o elemento. Ok? Então eu sei quando quero dizer, comece, comece mais I mais j. Isso representa o valor que está armazenado dentro da localização de IJ, ok? Então, o que não é nada além do valor armazenado, ok? Na representação adicional, você pode ver o valor armazenado em um local de I j. Esse é o significado aqui. Ok? Então, agora, sempre que quisermos basicamente ler os elementos em uma matriz bidimensional, ok? E também exiba os elementos da matriz bidimensional. Então, podemos escrever assim. Primeiro, incluirei o respectivo arquivo de cabeçalho stdio.h. Agora usando esta função principal, ok. Até agora, você pode ver que existem e somam oito x trimestrais e seu tamanho é cinco por cinco. Ok? E também considero p, q para indicar o tamanho da linha e coluna Sicer INJ ou as variáveis de loop aqui. Então, agora primeiro imprimiremos ou exibiremos o usuário para inserir a ordem da matriz e a ordem da matriz. Então você precisa ler essa ordem da matriz. Pessoa, basicamente pessoas-dias, o endereço de p e endereço de q, porque p está representando o tamanho da linha e q está representando o tamanho da coluna aqui. Em seguida, você pode solicitar que o usuário insira a ordem da matriz em que os elementos correspondentes, número de elementos, seja igual a fixar em Q, certo? Então, eu posso escrever elementos interpessoais aqui. E o número de elementos deve estar entre dois números Q. Ok? Assim, quando os usuários começarem a inserir esses muitos alumínios, você poderá lê-los dentro da matriz. Usando um loop for. Eu sou igual a zero a iterar em toda a linha. Então, i é menor que p, I mais, mais. E da mesma forma, para j igual a zero, j menor que Q, j mais mais. Agora, usando este escaneamento da declaração, podemos ler escrevendo como esta porcentagem d. Então, geralmente, hoje em dia você anota seu endereço ou qualquer nome que esteja aqui que eu considerei estar no Excel, então você tem que anular nosso vestido. Desligado. Eu j. Nós já discutimos aqui. Eu me visto como EX e vi que phi j não é nada, mas você tem que escrever assim, ok? Isso é uma estrela de x mais I mais j. Então, usando ponteiros, o equivalente é começar com x mais I mais G. Assim. Agora, isso está usando uma varredura da declaração que estamos lendo. E depois vamos exibir o conteúdo aqui. Então, na forma de uma matriz, que é uma matriz bidimensional, esse é o conteúdo da matriz que você pode exibir assim. Então, ao exibir, novamente, você pode usar isso para o loop I igual a zero I menor que p I mais, mais. Isso está indicando a linha. E então coluna a coluna, para j igual a zero, j menor que Q j mais mais. Agora podemos imprimir assim, imprimir de uma pessoa que deveria existir. Esse é o propósito da impressão. Você tem que escrever estrela de estrela em “nós explicitamente mais j, ok? Porque isso equivale a escrever simplesmente X de IJ. Ok? Portanto, para duas dimensões, você precisa duas estrelas para acessar o conteúdo dentro desse local. Em seguida, você precisa usar uma nova linha para que, após cada linha, ela se mova para a nova linha para imprimir a próxima linha e fechá-la. Portanto, esse é o formato que usamos aqui para basicamente ler e escrever o conteúdo da matriz bidimensional com a ajuda de ponteiros. Ok? Agora, vamos implementar isso e ver se há alguma mudança necessária. Então, aqui, para definir o estilo do arquivo de cabeçalho stdio.h. E dentro dessa função principal, considere uma matriz de amostra, que é uma matriz bidimensional. Ok? Considere que há duas linhas e três colunas. E eu vou compilá-los pela primeira vez, ok. 456. E vou apenas exibir esses elementos usando ponteiros. Ok? I é uma variável de loop e uma variável de loop de Jason. Agora, usando for loop, podemos tratar assim eu igual a zero, eu menor que dois, eu mais, mais. Ok? Porque ele está representando o tamanho da linha. Agora, considere o tamanho três da coluna. Então, J igual a zero, j menor que três, j mais, mais. Você pode imprimir isso aqui. Imprimir f. Normalmente escrevemos uma pessoa, ela deveria ser. Ok. Ou seja, notação. Para exibir o conteúdo na forma de uma matriz. Então, linha por linha. Ok? Então, se você quiser, eu posso escrever uma mensagem. Truques. Você pode exibir o conteúdo das métricas. Agora, vamos executar isso e vê-los. Portanto, para exibir basicamente elementos com algum espaço depois deles, você precisa escrever o formato WD de dias pessoais, em que w representa a vítima. Então, eu usei três personagens. Um caractere será impresso e os dois caracteres restantes funcionarão como espaços. Então, é assim que geralmente imprimimos um Adi bidimensional. Agora vou substituir isso por sua notação correspondente usando ponteiros, ou seja, uma estrela, comece com E a mais I mais j. Ok? Agora vamos executar esse código e ver o resultado. Você pode ver matrizes, então há duas linhas e três colunas. Ok? A mesma matriz é exibida usando esta lição. Então, como eu disse, existem dois índices, porque essa é uma matriz bidimensional. Para acessar o conteúdo, você terá que usar uma estrela dupla aqui, ou seja, uma estrela e outra estrela sub l. Se você estiver escrevendo apenas uma única estrela, mostrarei o que acontece aqui. Se você não está escrevendo para estrelas e escrevendo uma única estrela como essa, então você vai acabar imprimindo todos os endereços, ok? Suponha que exista, já que é um pincel de arte, você pode ver que o resultado é esse. Esses são todos os endereços alocados para essa matriz específica. Ok? Então, se você quiser acessar o conteúdo dentro dele, você tem que usar outra estrela aqui. Ok? Portanto, é uma taxa completamente próxima. Agora vamos correr e ver se você consegue ver assim. Agora, vamos supor que se eu quisesse basicamente ler o conteúdo da matriz, nesse caso, em tempo de execução, você pode armazenar assim, por exemplo, isso é algo como dez aqui, ok? E também esta é outra Mary bidimensional de 1010 por dez que estou tomando. Mas você pode solicitar que o usuário insira basicamente a ordem da matriz. Ok? Portanto, o pedido das impressoras geralmente é interrompido. Ok? Agora você tem que ler essa matriz específica que é DSD pessoal, baseada em pessoas, o endereço da vírgula p, endereço de q. OK? Posteriormente, você precisará solicitar o usuário insira esses muitos elementos, como endo percent são os elementos. Ok? Então, o que significa exatamente em elementos q. Quando o usuário começar a inserir os elementos do Boltzmann, você poderá começar a lê-los. I menor que p, porque p representa o tamanho da linha. E j igual a zero, j menor que Q, j mais, mais porque j está representando a coluna que é a. Ok? Então q está representando esse tamanho da coluna. E agora eu uso essa declaração do scanner para ler esses elementos. Então, os dias pessoais estão bem. Como o endereço que eu já mostrei, isso representa claramente o endereço, certo? Portanto, você precisa armazenar o elemento dentro desse endereço e , em seguida, acessá-lo. Então, novamente, como pegamos um p por q como ordem, você precisa usar essa ordem p por q para exibir esses elementos. Então, vamos executar esse código e ver o resultado. Insira a ordem da matriz, por exemplo, ordem da matriz é três por três. Ele solicitará que você insira nove elementos. Os elementos são 123-45-6789, ok? E agora você pode ver que a matriz é 123-45-6789, assim. Ok? Então, é assim que você pode usar o conceito de ponteiros para acessá-lo e armazená-lo na matriz bidimensional. Ok? 12. Ponteiros duplas: próximo é um ponteiro duplo, ou um ponteiro para um ponteiro em C. Ok? Então você vai, hum, então aqui está um ponteiro para um ponteiro ou ponteiro duplo. Portanto, a definição geral de um ponteiro para um ponteiro ou um ponteiro duplo é um ponteiro apontando para endereçar outro ponteiro, ok. Portanto, é considerado como um ponto diretamente no fichário ou no ponteiro duplo. Então, deixe-me escrever aqui o endereço de resfriamento de Winder outro indicador cancelando nosso vestido. E outro ponteiro é chamado de ponto. Estamos apontando para. Você marcou ponteiro em um ponteiro ou ponteiro duplo. Então, qual é a sintaxe geral desse ponteiro duplo? Ponteiro para um ponteiro? Então, deixe-me indicar esse índice de sulfato. Portanto, a sintaxe geral será considerada qualquer tipo de dado, mas pode significar deserto ou caractere, flutuar ou dobrar qualquer coisa. Portanto, digite dados, mas estrela, estrela, ponteiro em um ponteiro. Portanto, esse nome de variável pode ser qualquer coisa, mas você deve considerar duas estrelas, que representam um ponteiro duplo, ponteiro para um ponteiro. Agora vamos ver um exemplo de como trabalhar com variáveis. Então, tudo bem, ponteiro para um ponteiro dentro da função principal. Ok? Então, primeiro, depois de incluir o arquivo de cabeçalho. E dentro da função principal, estou considerando que isso está disponível, que é manter. E também estou considerando um único ponteiro ou fichário normal. E isso é um ponteiro duplo ou um ponteiro para um ponteiro. Ok? Então, primeiro vou armazenar o endereço de a no ponto B e o endereço de b no ponteiro pb. Ok? Agora, você pode exibir o conteúdo usando Star KPI ou double star p aqui. Então, eu vou te mostrar sempre que você quiser exibir o valor de k, você pode escrever assim. Ou você também pode usar uma variável de ponteiro, que é uma estrela p. Você tem outra forma de acessar o mesmo conteúdo. Ambos os ponteiros para um ponteiro que está presente são d, estrela dupla p. Ok? Então, usando o qual você pode acessar o conteúdo dentro do local da memória. Sim. Ok. Então, vamos ver aqui como isso vai funcionar. Em primeiro lugar, é uma variável e tem o valor de dez. Ok? E P é um ponto. A decisão da Agisoft, que significa considerar se existe Sophia, é um local de memória de 2000 um local de memória de 2000 e as taxas do endereço com o ponteiro Sophie Sofia é de 2000 e p está apontando para esse local de memória. Ok? Não, cada ponteiro também terá uma taxa de juros porque ela será armazenada em algum local da memória. E a localização da memória terá um endereço. Suponhamos que 3.000 seja o endereço da variável de ponteiro p. Agora, o endereço correspondente dessa variável de ponteiro será armazenado dentro de outro ponto, que é um ponteiro para um ponteiro. Então, isso representa um ponteiro para um ponteiro e vamos manter o endereço de p. Então, 3.000. Você pode ver que o ponteiro BB para um ponteiro está segurando o endereço de p. Ok? Agora, quando você começar a imprimir o valor de E, isso lhe dará um resultado como dez. Ok? Então, quando você começar a imprimir a estrela p, vamos ver como isso vai ser avaliado. A estrela p representa uma estrela. B significa anos 2000. O conteúdo dentro de Plutão e a localização da memória serão exibidos, o que é dez novamente. Ok. Agora vamos ver como esse ponteiro para um ponteiro será avaliado. Então, aqui estamos imprimindo claramente a estrela dupla BP, que pode ser avaliada como uma estrela. Estrela. O conteúdo de Pb é 3.000. Daqui até aqui, conteúdo dentro de 3.000 locais de memória. Então, qual é o conteúdo dentro da localização de 3.000 memórias aqui? Portanto, o conteúdo dentro da localização de 3.000 memórias é claramente dos anos 2000. Então comece os anos 2000, o que significa conteúdo dentro da localização da memória A resposta é dez. Então, para exibir o mesmo, você pode executar essas ações. Então, essas são as várias maneiras de acessar o mesmo conteúdo. que significa que o mesmo conteúdo pode ser modificado diretamente usando a variável ou usando uma variável de ponteiro, ou usando um ponteiro duplo ou um ponteiro para um ponteiro. Assim. Você pode escrever um programa que usa um ponteiro para um ponteiro e também um único ponteiro. Agora, deixe-me mostrar um exemplo, ok, desse ponteiro para um ponteiro. Até o ponto de reconsiderar o arquivo de cabeçalho. Em seguida, dentro da função principal. Então, vamos considerar que uma variável como E é igual a dez e estrela, estrela dupla é ponteiro para um ponteiro. Agora eu uso P é igual a eu me vestido. E outro é Pb ali mesmo. Então Pb está segurando o endereço de P. Ok? Agora, para exibir o valor de Yi, você pode acessar de várias maneiras. Aqui. Estou usando uma nova linha, ok? Diretamente, você ainda pode usar a variável. Ok? Então, aqui vou escrever que a é igual a. Agora, da mesma forma, quero acessar com a ajuda de um único ponteiro, que é um conteúdo correspondente em estrela p, estrela p. Vou mostrar aqui. E depois disso, precisamos imprimir a estrela dupla p. A estrela p é igual a porcentagem é a estrela dupla cortada p. Ok? Então, agora vamos executar esse código e ver a reserva. Portanto, aqui o argumento de tipo inválido do operador unitário star é aprofundado. Então, vamos declarar assim. Ok? Então considere uma estrela dupla B, ok? E isso é uma única estrela p. Então, o que significa valor armazenado dentro dela, certo? Ok? E ele acabou de aparecer em nove linhas aqui. Ok? Então, uma coisa que eu faço aqui, isso é int star p é igual a, e isso é e1 estrela, estrela p igual a. Invalide um tipo de argumento ou estrela funerária. Ok? Desculpe, aqui. O problema é que aqui já pegamos PSD de ponto único. Eles estão sob a estrela dupla P. Estrela dupla p, que é o nome do ponteiro duplo. Então, escrevemos um único p. Isso mesmo. Está mostrando que basicamente o PPE é o nome do ponteiro duplo que usamos. Temos que usar o mesmo nome. Você pode ver que está ganhando a é igual a dez estrela p é igual a dez. A estrela dupla p é igual a dez. Ok? Assim, você pode exibir o conteúdo, ok? 13. Programa de exemplo em ponteiros duplos: Deixe-me considerar um exemplo que envolve um único ponteiro e um ponteiro duplo. Ok? Então, vamos considerar que X é igual a dez. E vou considerar nossas diferentes variáveis, como a estrela p é um único ponteiro e estrela dupla PTR é um ponteiro para um ponteiro. Ok? Então, aqui eu considero que p é igual a qualquer Sophie Excel. Nper é igual ao endereço de p. Ok? Então, o que significa que se você estiver executando qualquer ação por meio do ponteiro p ou do PTR de ponteiro duplo. Portanto, isso afetará a localização da memória que é alocada para variáveis, exceto que o conteúdo dentro da variável x é atualizado. Então, vamos supor que eu esteja executando PDR de estrela dupla igual a dois, ok? Estrela única p mais 25. Ok? Agora, finalmente, quando você imprime o valor de x, isso afetará o valor de x ou o valor zero de x. Ok? Então, deixe-me mostrar o resultado. O resultado deve ser 35, ok? Então, por que 35 é a resposta? Porque você pode observar que a estrela dupla PTR está na verdade representando o conteúdo dentro da variável X. Agora isso vai estar aqui, estrela p mais 25. Portanto, p está apontando para um local de memória x e contém o valor dez. Então, dez mais 2510 mais o valor de 25 será 35. Portanto, PTR é o ponteiro que aponta para esse local de memória e seu valor é atualizado para 35. E depois estamos exibindo o valor x. Então, agora o valor de x está atualizado para 35, que significa que este é o mesmo local em que estamos nos referindo a x e também igual à estrela p. Então, tudo isso é igual a 35, x é igual a 35. A inicialização é que, se eu estrelar duas vezes, o PDR é 35. Então, é assim que você pode manipular o conteúdo em um local de memória usando um único ponteiro ou um ponteiro duplo. Assim. 14. Memória dinâmica e funções: Nesta sessão, discutiremos sobre o gerenciamento dinâmico de memória. Ok? Portanto, isso também é chamado de alocação dinâmica de memória. Então, geralmente, qual é o problema com essa alocação de memória estática? Ok? Portanto, se você considerar que, na linguagem C, geralmente usamos esse local de memória estática. Um exemplo de nossa localização de memória fixa ou estática é suponhamos que você tenha declarado em d de cinco e depois ponto e vírgula. Então, isso realmente representa que vai alocar cinco locais de memória contíguos. Você alocará cinco locais de memória contíguos assim como este, 1.234,5. Agora, esse local está representando um de zero. Então esse é o seu f1. Esse é o fim das três. E isso está aqui porque, assim, haverá cinco locais de memória contíguos. Agora, o problema com a localização da memória estática, então isso é considerado estático ou corrigido na forma de alocação de memória. Portanto, o problema aqui é que, se você quiser armazenar dez elementos, não pode armazenar porque a memória tem apenas quatro ou cinco elementos contíguos. Se você estiver usando apenas dois elementos, lembrar a localização da memória, ou seja, cinco menos dois igual a três locais, será claramente desperdiçado. A memória é visceral em três locais. Ok? Portanto, esse é um problema com a localização da memória estática ou fixa. Ok? Agora, para superar isso, em C, temos um local de memória dinâmica onde você fornece valor dinamicamente. E a memória é alocada com base no valor que você forneceu. Ok? Então, por exemplo, você está obtendo o valor n em tempo de execução e ele pode criar n locais de memória contíguos conforme sua necessidade. Ok? Portanto, isso é considerado como nossa alocação dinâmica de memória. Aqui. Existem diferentes funções de alocação dinâmica de memória disponíveis em C. Ok? Então, essas funções são a primeira é a função malloc. Portanto, essa é uma função malloc. E usando malloc geralmente alocamos qualquer tamanho de branco solicitado pelo usuário. Esses muitos bytes de memória serão alocados e o ponteiro apontará para o primeiro byte da memória, que discutiremos em breve em detalhes. Nixon, outro é o catálogo. Portanto, essa é outra função de gerenciamento dinâmico de memória em que ela alocará espaço para uma área de elementos. E também inicializará todos esses elementos em zero. E ele retornará o ponteiro da primeira localização. Ok? Então, vindo de graça. Isso é útil basicamente para desalocar o espaço de memória alocado. Anteriormente. Talvez você já tenha alocado algum espaço de memória usando malloc ou calloc, mas usando free, você vai desalocar a memória que está alocada usando malloc calloc, ok, em seguida, vamos realmente bloquear. Portanto, de acordo com o real Lock, sempre que o espaço de memória alocado dinamicamente não for suficiente, você terá a chance de se mudar. O quanto você se pergunta. Ok? Portanto, para esse propósito, função de realocação será útil, ou seja, a função realloc. Portanto, basicamente o ajudará a modificar o tamanho de qualquer espaço alocado você tenha feito anteriormente. Ok? Então, essas quatro são as funções de gerenciamento dinâmico de memória. Ok? Então, vamos discutir em detalhes sobre a primeira função, que é a função malloc. Ok? Então, como essa função malloc vai alocar o bloco de memória, ela alocará qualquer que seja o nosso bloco que você especificar, quantos blocos você deseja. Ok, então esses muitos blocos de memória que ele alocará. E considere como você vai alocar isso e como o ponteiro apontará para o primeiro local. Portanto, a sintaxe geral do malloc é PTR igual à estrela do tipo ponto. Você precisa especificar como este tipo de dados uma estrela e , em seguida, diferenciá-la por seu tamanho. Portanto, essa é a sintaxe geral do uso do malloc. Ok? Agora, vamos considerar um exemplo aqui. Então, aqui eu vou considerar uma variável de ponteiro chamada int star p. Agora p é igual a in star. Ok? Estou aplicando malloc aqui em Star Malloc off bite-size. Ok, vamos supor que eu esteja escrevendo como esta janela phi, tamanho de cinco em sizeof int. Então, isso basicamente alocará cinco no tamanho do indutor, quantos bytes ele retornará como gravador. Portanto, o tamanho do número inteiro é basicamente quatro bytes. Então cinco em quatro é igual a 20. Portanto, isso alocará 20 bytes de espaço de memória. E isso será apontado pelo ponteiro p certo? Os pontos a, b apontarão para este primeiro local. Então, deixe-me mostrar como isso vai ser feito. Ok? Então, antes de tudo, está criando phi contíguo em locais de memória. Então, phi contíguo em locais de memória. Então isso é 12345, assim. Ok? E considere que o primeiro é um local chamado mil, por exemplo, serão mil e quatro. Isso é mil e oito. Ok? Isso é 1012 e isso é 101,6. Assim, locais de memória phi contíguos serão criados. E p será um ponteiro contendo o endereço base desse Adi em particular. Então p é um ponteiro. E isso está apontando para o endereço base assim. Ok? Então, agora você vai observar que cinco locais de memória contíguos são criados. E p é um ponteiro que aponta para o endereço base de toda a matriz. Ok? Então, isso é feito com a ajuda de Melaka. Suponha que, se a memória não for alocada, nesse caso, p estará apontando para nulo. Ok? Suponha que não haja espaço de memória de localizações de memória contíguas phi. Nesse caso, ele deve retornar nulo. Então, geralmente, tudo bem, se eu usar um número pequeno , ele será alocado. Mas vamos supor que você receba um número muito grande, ok? E esse espaço de memória contíguo, ok? Portanto, ele não tem muito espaço de memória. Nesse caso, ele retornará nulo. Ok? Então, isso é sobre malloc. Agora, rapidamente, veremos mais uma função. Para escrever qualquer programa, pode ser necessária outra função que seja uma função livre. Ok? Então, primeiro discutirei sobre a função gratuita. Por quê? Porque você precisa se desalocar para qualquer memória que seja alocada por você, certo? Portanto, é usuário desalocar memória, que está localizada usando o ponteiro para desalocar memória. Se você observar a sintaxe geral gratuitamente aqui. Assim, você pode escrevê-lo como livre de PDR, escrevendo livre de PTR. Portanto, ele liberará a memória alocada pelo ponteiro PTR. Ok? Então, agora vamos considerar o mesmo exemplo que já consideramos. Há uma estrela int p. P é igual a int star malloc de cinco no tamanho de int. Agora, depois disso, você deseja desalocar qualquer memória alocada. Então você pode fazer isso com a ajuda da escrita livre, livre de p. Ok, então isso vai desalocar a memória que é alocada usando o ponteiro p aqui, ok? E para fazer uso dessas funções, ok, qualquer que seja a parte do gerenciamento dinâmico de memória, você precisa incluir o arquivo de cabeçalho correspondente, que é malloc dot hij share. Ok? Então você vai incluir malloc dotted share. Então, vamos considerar escrever um programa aqui. Então, onde você vai alocar memória com a ajuda do malloc. Ok? Então, primeiro inclua o arquivo de cabeçalho padrão, que é um stdio.h. Agora você quer usar essa funcionalidade malloc. Então, para isso, inclua malloc dot hij. Isso é Malloc Dotage. Agora usando a função principal. Ok? Primeira vez usando um ponteiro porque você precisa de um ponteiro para apontar para o endereço base da memória alocada na estrela IP, DR. ok. E n é uma variável e outra variável que estou usando IA basicamente para fins de hidratação. E n representa quantos elementos você deseja armazenar. Ok? Então, vamos alocar memória com base no valor n usando malloc. Então, primeiro, podemos solicitar que o usuário basicamente insira um valor n ou pedir que o usuário insira o número de elementos. Então, quantos elementos existem? Você tem que entrar. Então, depois de inserir o número de elementos e usar a instrução scanner if, podemos ler esse valor em uma variável. Então, essa é a porcentagem d de endereços pessoais em que eles estão dissolvidos. Ok? Então, usando esse valor n, ok? Portanto, podemos alocar usando malloc onde I PDR está apontando para o endereço base da memória. Aqui é igual a. Agora ele precisa digitar usando cursor do deserto porque estamos tentando armazenar todos os valores inteiros aqui, ok? E aloque usando malloc, quantidade de bytes que você está alocando. Então, o que nada mais é do que o iene no tamanho de int, tamanho em ocupado. Então, isso alocará memória para sobremesas E&M, certo? Ok. E depois disso, usando o valor n, você pode começar a armazenar elementos com a ajuda da instrução scan f, ok. Então, vamos ver como isso pode ser feito. Ou seja, antes de tudo, solicitarei que o usuário insira esses muitos elementos porque você já considerou o valor n. Então você tem que jogar vários elementos. Estou escrevendo “enter person days” é d elements. Então o usuário começa a inserir esses muitos limites, ok? E uma vez que esses elementos são inseridos, tudo bem, então você tem que começar a armazená-los na memória alocada usando malloc. Portanto, isso pode ser feito com a ajuda de uma variável de loop i igual a zero, I menor que n i mais, mais. Ok? Usando uma declaração scan f, você pode armazenar, certo? Então isso é um scanner. porcentagem deve ser esta é uma DR mais I mais I. Então, o endereço base é apontado por VTR, ok? Quando o valor I for zero, forçe-o a armazenar o elemento nesse local. Em seguida, é incrementado a olho nu. Isso significa que ele irá para o próximo local e armazenará o próximo elemento. Então é assim que o scanf funciona aqui. Agora, queremos exibir todos os elementos que estão armazenados aqui agora. Assim, você pode escrever uma declaração print f dizendo a lista de elementos. Ok? A lista de elementos. Ok? Agora, usando for loop, você pode iterar e exibir todos esses elementos como I igual a zero, I menor que n i mais plus. Agora comece a exibir esses elementos com a ajuda da instrução fprintf. Ok? Então, onde você quer conteúdo dentro do local da memória? Portanto, use uma estrela porque você está tentando acessar com a ajuda da variável ponteira IV TR. Então, comece o ICTR plus I, usando o qual você pode acessar o conteúdo dentro de cada um desses locais de memória, que é apontado pelo IPT. Ok? Assim que o acesso estiver concluído, basta desalocar a memória que já está alocada usando malloc. Para isso, você deve usar um I PTR gratuito. Estamos desalocando memória que é alocada usando IP, ou seja, usando malloc. Ok? Então, esse é o programa inteiro. Ok? Vamos ver como esse programa vai funcionar até o outono. Na tela de saída. Geralmente. Ele solicitará que você insira primeiro o número de elementos porque execução do programa começa na função principal, e aqui está, imprimindo essa declaração ali mesmo, que está no número de elementos. Então, suponhamos que você tenha inserido vários elementos como fibra. Ok? Então o que acontece aqui? Isso criará locais de memória phi contíguos. Ok? Então, considere aqui. Como essa criação acontece é usando IP TR, ok? I PDR será o ponteiro que apontará para qualquer memória alocada usando malloc. Ok? Aqui, vamos dizer que N é igual a cinco, o que significa que ele criará uma localização phi contígua como esta. Ok? Não. Malloc tem que digitar. Depois disso. Estamos realizando a digitação no deserto. Por padrão, será um ponteiro largo. Os ponteiros são um ponteiro genérico. Então é aí que você precisa digitar convertido em seu tipo de dados correspondente, mas como IBD ou como um ponteiro inteiro. Ok, você tem que digitar convertido fazendo deserto. Uma vez que as memórias estejam localizadas assim para um valor de n igual a cinco. Ok? Então, se você olhar para a próxima declaração aqui, insira a porcentagem d de elementos, o que significa que ela será exibida na tela de saída dizendo que insira cinco elementos porque o valor n é cinco aqui. Ok? Agora você pode começar a inserir esses cinco elementos. Ou seja, suponha que você tenha inserido 1020304050. Esses elementos são inseridos. Então esses elementos serão armazenados um após o outro aqui, 1020304050. Então, por quê? Porque como o valor do meu é zero, ok? Então, eu PTR mais zero representarei esse local. Ok? Então, considere que este é o nosso milhar de vestidos. Isso será mil, 4.008. Isso é 1012, isso é 1016, ok? Agora usando IP TRE estão apontando para o endereço base, ok? Agora vamos exibir a lista de elementos aqui. Ok? Então, finalmente, ele exibirá a lista de eliminações. A lista de elementos. Quais são os elementos que você está exibindo estão usando estrela. Você está tentando acessar cada elemento aqui. Portanto, os mesmos elementos serão exibidos quando eu for igual a zero. Esse elemento será exibido na próxima iteração quando i for igual a um, ok, I PDR será incrementado em um local de memória. Então esse elemento de 20 será exibido e assim por diante, você poderá exibir todos esses elementos, ok? E finalmente, grátis ou cinco VTR, ok? Então, o que significa que basicamente desalocará a memória alocada usando o ICTR. Portanto, você não poderá mais acessar esse conteúdo. Ok? Então é assim que o malloc funciona e também funciona gratuitamente. Ok? Então, é assim que você pode alocar memória usando malloc e desalocar a memória usando free. No gerenciamento dinâmico de memória. 15. Exemplo de Malloc(): Agora, neste programa, mostrarei como usar basicamente esse malloc para alocar memória dinamicamente. Então, primeiro arquivo de cabeçalho em inglês ou D, ok? E também inclua um arquivo de cabeçalho malloc dot h. Ok? Na função principal, primeiro, considere o ponteiro chamado estrela I VTR, ok? E então eu é a variável de loop. Então n está representando vários elementos que você deseja armazenar. Ok? Então, vou apenas solicitar que o usuário insira basicamente os elementos. Então, número de elementos. Ok? E usando a instrução do scanner, podemos ler o valor n aqui, ou suavizar. Agora, usando essa declaração print f, podemos solicitar assim inserir elementos percentuais d. Ok? Então esse é o número n de elementos que você precisa inserir. Ok? Agora, usando um for-loop, você pode ler esses elementos como I igual a zero, I menor que n i mais mais. E usando a afirmação de que, tudo bem. Então, quando você quiser basicamente entrar e armazenar, tudo bem. Então, o que é necessário é alocar memória, não é? Então, quando o usuário começa a inserir o número de elementos, você precisa alocar memória, que está usando malloc que você está alocando aqui, IPR é igual a, ok. Então, eu tive um desejo próximo. E então, usando o malloc off, estou alocando em locais. E cada local costuma ser dissidente, certo? Portanto, esse é o tamanho do InDesign. Ok? Então, honestamente, as memórias estão localizadas agora. Vamos armazenar aqui. Então isso é um IP DR plus i. Ok? Então é assim que você pode armazenar aqui. E agora queríamos exibir esses elementos que estão armazenados aqui. Então, eu posso apenas imprimir uma declaração dizendo exibindo elementos. Portanto, para exibir elementos, você precisa, novamente, desse for-loop para eu negociar. Ok? Mas imprima uma declaração para exibir o conteúdo. Então, porcentagem d. Ok. Para acessar o conteúdo dentro dele usando a estrela, você pode acessar aqui I PTR plus I. E, finalmente, vamos desalocar a memória que é alocada usando IP DR. Ok? Então, vamos executar esse código e ver o reservado. Você pode ver que ele está solicitando que você insira o número de elementos. Estou inserindo o valor como cinco. Agora. Estou inserindo 102-030-4050. Ok? Então, os mesmos elementos que estão sendo exibidos aqui. Se você quiser que eles sejam exibidos em algum formato, ok, então você pode usar essa pessoa, essa 40. Então, vamos entrar dessa vez. Só três elementos, ok? Esses três elementos são como 102030. Portanto, podemos observar aqui a exibição desses três elementos, 102030. Qualquer valor que você esteja dando. Essas muitas memórias alocadas de forma contígua são criadas. Com a ajuda da função de gerenciamento dinâmico de memória , que é malloc. O ponteiro apontará para o primeiro local. Ok? Então, dessa vez, estou inserindo o número de elementos como dez. Então, vamos supor que esses dez elementos sejam assim. Ok? Agora você pode ver aqui a exibição dos elementos 1234 até dez. Todos esses elementos são exibidos aqui. Ok? Agora, o que acontece quando você tenta desalocar primeiro e depois tenta acessar o conteúdo. Vamos sobrepor que estou substituindo a declaração que estou removendo aqui e colocando aqui. Ok? Então, o que acontece é você não consegue acessar esse conteúdo. Você pode ver porque as memórias estão localizadas. Mas depois você desalocou a memória, certo? Portanto, seja qual for o conteúdo, alguns valores de lixo armazenados nesses locais serão impressos aqui. Ok? Porque você alocou memória usando malloc aqui. E depois armazene o conteúdo usando o ponteiro que você armazenou. E mais tarde, imediatamente você desalocou a memória. Agora você está tentando exibir o conteúdo, ok? Então, nesse caso, o que acontece quando ele já foi alocado? Ok? Agora que você está tentando exibir nesses locais que haverá alguns valores inúteis, então eles serão impressos. Ok? Portanto, a bandeja, você deve fazer isso por meio da localização de seus usos, está concluída. Ok? Assim. 16. Alloc(): Agora vamos discutir a evolução. Próxima função, que é a função de gerenciamento dinâmico de memória chamada catálogo. Então, geralmente, nessa função de catálogo, ela realmente alocará. Assim como Malloc. Ele também alocará memória. Mas aqui vamos alocar principalmente esses blocos de memória. Malloc. Você pode dizer esse tipo de bytes de memória que você está realocando. Mas no catálogo, você está alocando blocos de memória, como o número N de blocos que você deseja delegar, você pode alocá-lo. Então, ele aloca blocos de memória. Ok? Agora, vamos considerar essa sintaxe. Portanto, Kellogg, a sintaxe Kellogg pode ser PTR igual ao tipo de dados estrela. Ok? Então você tem que escrever um catálogo. Então, geralmente em malloc você escreverá e se referirá a dois tamanhos de tipos de dados. Mas aqui está o tamanho da vírgula N do tipo de dados. Haverá dois argumentos para a função Kellogg. Um é o número de blocos seguido pelo tamanho de cada bloco. Ok? Então, aqui você precisa fornecer o tamanho do tipo de dados. Ok? Então, essa é a sintaxe geral aqui. Ok? Agora, uma vez que você aloca memória usando o catálogo , a memória contém locais diferentes, ok? Então, eles o inicializarão automaticamente para zero, ok? Cada bloco de memória será preenchido com zero. Então, deixe-me mostrar aqui como isso vai funcionar. Então, considere um exemplo. Como na estrela p. Então p é o ponteiro. Agora, B é igual a. Então, usando o catálogo, estamos alocando memória aqui. Então, a estrela Galois, tosse. Suponhamos que eu esteja escrevendo dez vírgulas sizeof em deserto. Então aqui ele vai alocar memória, que é uma pequena área de memória, ok? E cada local ou bloco é do tamanho do tipo int desert. E ele preencherá automaticamente cada bloco contendo dados como zero. Ok? Então, vamos considerar aqui. B é o ponteiro, ok? Apontando para o endereço base da memória, que está localizado. Então, esse é o primeiro 1, e assim por diante, assim. Ok? Suponha que você esteja considerando a luxação como sendo a década de 2000. E o tamanho do número inteiro é de quatro bytes. Ok? Então você verá assim e assim por diante. Agora, manteremos o endereço base dessa memória. E cada local será preenchido automaticamente com zeros inicialmente, de acordo com o catálogo. A principal diferença entre Carlo can malloc está no catálogo. Estamos aprovando dois argumentos. Ok? Já no caso de malloc, estamos aprovando um único argumento. No caso da vieira, estamos alocando blocos de memória. Esse malloc, estamos alocando bytes de memória. Então, agora é assim que toda a memória está localizada e as diferenças no catálogo de cada um desses locais serão inicializadas para zero. Já no caso de malloc. Haverá valores de lixo, ok? Haverá valores inúteis. Então, vamos escrever um programa que faça uso dessa função calloc para criar memória dinamicamente. Ok? Então, primeiro vamos incluir o arquivo de cabeçalho, que é stdio.h, ok? E também inclua o arquivo de cabeçalho malloc dot h. Ok? Agora, considere a função principal. Ok? Então, dentro dessa função principal, entendo seu ponto de vista. Uma variável que é como anteriormente, consideramos IBD, é semelhante aqui . Também estou considerando uma estrela variável ponteira I PTR. Agora, precisamos solicitar que o usuário insira vários elementos. Então, aqui, o número de elementos. Ok? Portanto, quando o usuário insere vários elementos além de usar scan f, podemos ler esse número de elementos, como o pincel DI de uma pessoa por dia, com frequência. Ok? Agora, usando IV TR, podemos alocar em locais, ok? Então, nós o chamamos porque n blocos de memória podem ser alocados usando calloc all em blocos do deserto que estou usando aqui. Então, no Star Catalog de Goma, sizeof, no deserto, em coma sizeof. Ok. Agora, precisamos solicitar que o usuário insira esses muitos elementos. Ok? Então, esses são os gostos interpessoais, os elementos. Ok? Então, uma vez que você insere esses muitos elementos, eles precisam ser armazenados, certo? Portanto, qualquer memória alocada usando o catálogo, usando a qual você pode armazenar esses elementos. I igual a zero I menor que n I mais e usando o scanner, ok, você pode armazenar aqui, ou seja, uma pessoa os dias do IBT são menores. Ok? Assim, você pode armazenar os elementos aqui. Agora. Você pode exibir os elementos assim. Imprima f, a lista de elementos. Ok? Então você pode escrever assim, a lista de elementos. Ok? Agora, você pode observar aqui i igual a zero, I menor que, I, menos Press. Ok. Agora vamos imprimir esses elementos usando o ponteiro que podemos acessar. Ok? Como começar o IPT r mais i, ok? Você pode acessar. Finalmente, você pode basicamente ler os elementos nele e também exibir os elementos. Agora podemos desalocar a memória que está localizada. Então, novamente, escreva sem IP DR, para que quaisquer memórias localizadas sejam desalocadas. Ok? Então, se você olhar este programa, ok, compare-o com o programa malloc. Isso é bastante semelhante, exceto que essa linha específica é variável, onde você alocou memória usando o catálogo aqui. E a sintaxe do Kellogg. Kellogg off em vírgulas, tamanho do tipo de dados. Ok? Então essa é a única mudança. Ok? Então, vamos trabalhar nisso e exibir o conteúdo. O que quer que seja levado. Não, aqui. Vamos ler esse ponteiro em forma de I, ok? No final, também eu. Então, aqui solicitaremos que o usuário entre. Número de elementos. Número de elementos. Ok? Portanto, usando a digitalização da declaração , podemos lê-la. Portanto, a porcentagem deve estar bem. Agora, usando IP TR, vamos alocar memória usando calloc. Então, aqui em Star, o catálogo é dividido em tamanho de carma com frequência. Ok. Então, agora vamos inserir esses muitos elementos. Assim, podemos pedir ao usuário que insira esses muitos elementos, o que é n número de elementos. Ok? Então, quando você começar a inserir esses muitos elementos usando for loop, você poderá lê-lo. I igual a zero, I menor que n I mais mais. Usando a declaração scanf, podemos ler a porcentagem d, ok? Eu VTR e eu. Ok. Agora podemos começar a exibir esses elementos aqui. Imprima f, ok? A lista de elementos que você pode exibir. Ok? Então, usando for loop para I igual a zero, eu menor que I mais, mais. Ok? Usando a impressão de uma declaração, podemos exibir a impressora, o gosto da pessoa. Seja. Ok. Suponha que eu queira alguns espaços durante a exibição. Você pode começar com I PTR plus i. Ok. Finalmente, você pode desalocar qualquer memória alocada usando o ponteiro IBD are. Ok, com a ajuda do catálogo que você alocou. Ok? Então, vamos executar esse código e ver o resultado. Insira o número de elementos. Eu inseri o número de elementos como cinco aqui. Ok? Portanto, os elementos são 102-030-4050. Ok? Você pode ver que eles estão exibindo exatamente esses elementos. O que acontece quando eu removo isso livre de IP DR. aqui e uso aqui. Ok? Então, vamos fazer isso e ver a reserva. Cinco elementos e 2030, 40, 50. Ok? Novamente, você pode ver aqui que está desalocando memória, ok? Então, depois de desalocar a memória que você está tentando acessar a taxa, isso é um problema. Ok? Então, nesse caso, você obterá alguns valores inúteis. Ok? É por isso que você deve sempre usá-lo sem IBD pois está aqui após a alocação da memória. Isso é depois de acessar todos os elementos e começar a desalocar a memória. Mais uma coisa é supor que você não vai usar essas linhas como inserir elementos, ok? E armazenar esses elementos nessa memória. Nesse caso, qual será a reserva? Ok? Então, vamos supor que eu tenha inserido os valores cinco. E você pode ver que a lista de elementos são zeros, zeros, zeros 00. Por quê? Porque, de acordo com o catálogo, uma vez localizadas as memórias, tudo bem, ele substituirá todos os zeros nesses locais de memória por padrão. É por isso que você está recebendo valores padrão como zeros. Ok? Então é assim que o catálogo funciona. 17. Realloc(): Então, o próximo é um verdadeiro cadeado. Ok? Portanto, no caso da lei real, vamos realocar a memória se a memória atualmente alocada for insuficiente. Portanto, uma pequena alocação de memória na água pode ser feita usando malloc ou calloc. Você começará a alocar memória mais tarde. Você quer expandir a memória, ok? Então você pode começar a usar o OK real. Ok, usando o log, você pode realocar a memória. Sintaxe geral para isso. O verdadeiro problema será que você pode escrever como se esse novo PDR fosse igual ao tipo de dados estrela. Estrela do tipo de dados de bloqueio real, sim, bloqueie todo o novo tamanho da vírgula PDR ou o tamanho comum do PDR. Ok? Portanto, essa é a sintaxe correspondente do bloqueio real. Então, o que significa o antigo PTR aqui? Ok? Então, aqui eu posso escrever onde o antigo PTR está realmente representando o ponteiro que está apontando para o bloco de memória que já está alocado usando malloc ou calloc, como disseram horizontalmente, alocará alguma memória. Usando malloc ou calloc write. Esse ponteiro mundial está , na verdade, representando o ponteiro apontando para a memória antiga. Para a memória. E essa memória é alocada usando malloc ou calloc. Ok? Então isso está representando essa memória oral. Agora, o que é o novo sol? Portanto, o novo tamanho representará o tamanho atualizado que você deseja alocar usando o armário real. Então eu posso escrever aqui como tamanho do novo bloco, ok? Ou tamanho do bloco a ser realocado. Então, novamente, aqui também, depois de realocar a memória, novo ponto, não haverá como apontar para essa memória recém-alocada usando OK real. Então, deixe-me mostrar um exemplo aqui. Então, considere um exemplo usando real, também conhecido como primeira vez, considerando que um ponteiro está decepcionado aqui na estrela b. Agora, estou alocando memória usando malloc para esse ponteiro indutor. Então, isso está na estrela Malloc off. Podemos escrever, por exemplo, I. Quero alocar n locais de memória. Então, dez em tamanho de dez em tamanho de int. Ok? Portanto, ele alocará dez locais e cada um terá o tamanho de um número inteiro. Agora, podemos alocar usando ocre amarelo. Portanto, se a memória já alocada não é suficiente. Ok? Então você vai localizar usando um bloqueio real. Suponhamos que eu queira 20 locais, novos tamanhos, 20, por exemplo, para que, nesse caso, eu possa escrever em Star Real Lock Off. Então, qual é o ponteiro mundial aqui? Estou usando a palavra ponteiro, um novo ponteiro, ambos apenas com o mesmo P. Então, ponteiro antigo, tamanho novo comum. No momento, estou alocando novos tamanhos. 2010 locais ou dez quarteirões estão localizados. Agora são 20 quarteirões. Estamos nos mudando. O ponteiro mundial e o novo ponteiro são iguais, o que significa que o novo ponteiro será o mesmo ponto p apontando para a memória recém-alocada. Ok? Então, anteriormente, aqui você pode ver que existem dez blocos de memória. Dez em quatro é igual a 40 bytes de memória alocados. Mas usando isso, serão 2020 em quatro, seja , 80 bytes de memória serão alocados. Para ambos, estamos usando o mesmo ponteiro para apontar. P agora apontará para a memória atualizada, que é de 80 bytes de memória. Ok? Então, agora vamos considerar um exemplo aqui. De verdade, também conhecido como. Ok, então primeiro vou basicamente considerar a alocação de um ponteiro de personagem. Deixe-me implementar diretamente. Ok? Então, estou usando um ponteiro de caracteres aqui. Estou usando o ponteiro de caracteres. Então, onde eu posso escrevê-lo como nome da estrela do carro, por exemplo , ok, nome da estrela. Então, este é o meu ponteiro de caracteres usando o termo alocação de memória. Então esse nome é igual a, ok. Então comece Malloc. Ok. Então, suponhamos que eu esteja alocando dez locais contíguos e cada um seja do tipo de dados de caracteres, mas o que significa que o tamanho da cárie, um byte, dez em um são dez bytes de memória que estou alocando usando malloc. Ok? Então, agora eu quero copiar algum conteúdo para isso. Você pode usar o STR CPI para copiar. Mas, para esse propósito, você precisa incluir outro arquivo de alto perfil , que é um arquivo de cabeçalho string dot h. Arquivo de cabeçalho String dot h. Ok? Então, uma vez que eu incluí, agora estamos livres para usar esse STR para ver BY. Ok. Então, estou escrevendo sobre como colocar uma corda chamada Hyderabad. Ok. Então, depois de copiar isso, agora estamos tentando imprimir o nome que está localizado nesse endereço específico. Ok, vamos supor que eu tente imprimi-los. O nome que estou armazenando, que é uma bolsa hidráulica, e que está armazenado no endereço. Ok. Então, a íris é percentual de p certo? Então, podemos escrevê-lo como um nome, nome de vírgula. Assim, você pode absorver que um nome pela primeira vez será impresso no formato de string exato, ok? Mas na segunda vez você pode ver o mesmo nome, mas a porcentagem de usuários do SBus, que significa o endereço, será exibida. Ok? Agora, isso está usando o malloc que alocamos, vamos supor que eu queira armazenar uma string maior. Ok? Então, nesse caso, isso não é um escritor suficiente, então vou usar o bloqueio gratuito. Suponhamos que seja uma estrela. Ok. Então eu uso realloc e aloco aqui. Suponhamos que cerca de 15 caracteres e tentemos armazenar. Portanto, esse é o tamanho do tipo de caractere. Ok? Então aqui também ponto e vírgula, aqui também ponto e vírgula. Ok? Agora estou tentando copiar outra string. Ok? Suponhamos que o nome seja vírgula. Então, só precisamos pegar uma corda maior. Ok? Então, vou tirar uma corda como mini para isso. Ok? Portanto, o número de caracteres é maior do que o número de caracteres em Hyderabad. Então, agora vamos imprimir da mesma forma aqui também. No momento, o nome endereço correspondente também estão tentando exibir junto com o nome. Ok? Então, quando seus usuários estiverem concluídos, você pode simplesmente desalocar qualquer memória que esteja alocada aqui. Portanto, sem nome, com o qual você pode desalocar memória que está localizada aqui. Vamos executar esse código e ver reservado. Ok, então eu tentei usar aqui, ok. Então, já estamos imprimindo apenas em uma linha diferente. Ok? Então, aqui está um corte e aqui também um corte. Agora você pode ver que o nome é hydro bot, não é nosso vestido. Ok. Você pode observar o endereço correspondente alocado para isso. Agora o nome é minneapolis, e normalmente são fraldas neste endereço específico. Ok.