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.