Muito bom, Parabéns. Agora consigo ler os trechos de código em C q contém ponteiros e entende-los, antes não entendia nada, confundia *ptr (declaração de ponteiro) com *ptr (extrair valor da memória para onde o ponteiro aponta. Obrigado a toda e equipe do C Progressivo.!
Fiz a seguinte alteração no código mudando o 'while' para um laço 'for'. Mas parece que o que retornou foram os endereços de memória. --------------------------------------
int main(void)
{ int pa[100], razao;
int *ptr;
printf("Insira o termo inicial da PA: "); scanf("%d", &pa[0]);
ptr = pa;
printf("Insira razao da PA: "); scanf("%d", &razao);
Porque saíram os endereços de memória uma vez que eu escrevi para que me dê na saída um VALOR ?? *ptr ?? (asterisco antes do ponteiro) -- printf("-> %d ", *ptr);
7 de dezembro de 2016 às 22:22
Anônimo disse...
O blog de vocês me ensina mais do que as aulas do meu professor de Algoritmos e Estruturas de Dados 1. Obrigado.
5 de maio de 2018 às 13:52
Agora que ensinamos como fazer os ponteiros apontarem para
variáveis, bem como ver e alterar o valor de variáveis através dos ponteiros, neste tutorial de nossa apostila de C, vamos dar mais exemplos reais de uso dos ponteiros, com operações de
incremento, decremento, comparação de igualdade e negação.
Baixe este conteúdo: Apostila C Progressivo
Clique aqui e obtenha seu certificado para entrar no Mercado de Trabalho!
Incremento, Decremento e Comparando ponteiros em C
Exemplo de código:
Calcular os termos de uma P.A usando Ponteiros em C
Peça ao usuário dois inteiros, onde o primeiro será o
primeiro termo de uma P.A (Progressão Aritmética) e o segundo a razão. Em
segundo, através de ponteiros, preencha um vetor com os 10 primeiros elementos
dessa P.A.
Após declararmos um vetor de 10 elementos, fazemos com
que o ponteiro aponte para esse vetor. Como o nome vetor nada mais é que do que
o endereço do primeiro elemento.
Assim, inicialmente, nosso ponteiro aponta para o
primeiro elemento do vetor, que será o primeiro elemento da P.A.
Para calcular os elementos da P.A, basta fazermos com que
o próximo termo seja o atual mais a razão:
*(ptr+1) = *ptr + razao
Entramos no laço WHILE que irá percorrer todos os
elementos do vetor, exceto o último (pois o último elemento é calculado pelo
penúltimo, então não precisa ir até o último).
Ou seja, só irá parar depois de termos atingidos o penúltimo
elemento do vetor, que é pa[8].
Como vamos usar somente ponteiros para percorrer o vetor,
nosso WHILE deve continuar enquanto o endereço de nosso ponteiro for diferente
último endereço do vetor (que não precisará ser acessado, pois cada iteração do
looping calcula o próximo termo da PA).
Em seguida, usamos o laço FOR para você ver como podemos
manipular ponteiros dentre dele também.
Inicializamos, novamente, o ponteiro a partir do primeiro
elemento: ptr = pa;
Depois, imprimimos todos os elementos, enquanto o
endereço que o ponteiro aponta for menor ou igual ao último endereço do vetor.
Veja como ficou nosso código:
#include <stdio.h>
// Curso C Progressivo: www.cprogessivo.net
// O melhor curso de C! Online e gratuito !
// Artigos, apostilas, tutoriais e vídeo-aulas sobre
// a linguagem de programação C !
int main(void)
{
int pa[10], razao;
int *ptr;
printf("Insira o termo inicial da PA: ");
scanf("%d", &pa[0]);
ptr = pa;
printf("Insira razao da PA: ");
scanf("%d", &razao);
while( ptr != &pa[9])
{
*(ptr+1) = *ptr + razao;
ptr++;
}
for(ptr = pa ; ptr <= &pa[9] ; ptr++)
printf("-> %d ", *ptr);
return 0;
}
Na próxima seção, vamos usar todos esses conceitos sobre ponteiros com bastante frequência.
postado por Programação Progressiva às 13:36 em 11 de mar. de 2013
4 Comentários
Fechar esta janela Ir para formulário de comentárioNa seção onde diz:
ptr – 3 -> endereço de onde ptr apontava, deslocado de duvas variáveis para trás
o correto seria: ptr – 3 -> endereço de onde ptr apontava, deslocado de três variáveis para trás?
17 de setembro de 2015 às 06:43
Muito bom, Parabéns. Agora consigo ler os trechos de código em C q contém ponteiros e entende-los, antes não entendia nada, confundia *ptr (declaração de ponteiro) com *ptr (extrair valor da memória para onde o ponteiro aponta.
Obrigado a toda e equipe do C Progressivo.!
29 de abril de 2016 às 10:40
Fiz a seguinte alteração no código mudando o 'while' para um laço 'for'. Mas parece que o que retornou foram os endereços de memória.
--------------------------------------
int main(void)
{
int pa[100], razao;
int *ptr;
printf("Insira o termo inicial da PA: ");
scanf("%d", &pa[0]);
ptr = pa;
printf("Insira razao da PA: ");
scanf("%d", &razao);
for(ptr =&pa[0]; ptr <= &pa[99]; ptr+=1)
{
*(ptr+1) = *ptr + razao;
printf("-> %d ", *ptr);
ptr++;
}
system("pause");
return 0;
}
A saída foi essa:
Insira o termo inicial da PA: 5
Insira razao da PA: 7
-> 5 -> 1999976654 -> 1999976618 -> 0 -> 3872520 -> 127 -> 1375732051 -> 1 -> 3866960 -> 3866624 -> 3872531 -> 3866960 -> 16777218 -> 2 -> 2000253429 -> -2 -> 1999977726 -> 1375732051 -> 3872528 -> 8 -> 1999895274 -> -1 -> 2686648 -> 0 -> 4199152 -> 0 -> 0 -> 16842752 -> 7536836 -> 3870328 -> 2686664 -> 3866624 -> 1972040841 -> 1719536184 -> 3870328 -> 2000031890 -> 36 -> 4 -> -2029387870 -> 1972041216 -> 0 -> 2686684 -> 1972634280 -> 1972040914 -> 1972048270 -> 332126055 -> 0 -> 4199152 -> -1 -> 1972145365
Pressione qualquer tecla para continuar. . .
Porque saíram os endereços de memória uma vez que eu escrevi para que me dê na saída um VALOR ?? *ptr ?? (asterisco antes do ponteiro) --
printf("-> %d ", *ptr);
7 de dezembro de 2016 às 22:22
O blog de vocês me ensina mais do que as aulas do meu professor de Algoritmos e Estruturas de Dados 1. Obrigado.
5 de maio de 2018 às 13:52