Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Diferença entre códigos.


Guest --Rodolfo --

Pergunta

Guest --Rodolfo --

Gostaria de saber qual a diferença entre os códigos, o primeiro código imprime o valor esperado. Já o segundo imprime uma valor totalmente diferente do esperado (provavelmente um endereço de memória), por que?

obs: Seguindo a recomendação para manter organizado tentei usar o codebox mas não funcionou.

//Código 1:

#include <stdlib.h>
#include <stdio.h>
int main ()
{
int matrx [10];
int *p;
int i;
p=matrx;
for(i=0; i<10; i++){
         *(p+i)=i;
         }
printf ("O terceiro elemento do vetor e: %d\n",p[2]);

system("PAUSE");    
return 0;
}
//Código 2:
#include <stdio.h>
int main ()
{
int matrx [10];
int *p;
int i;
p=matrx;
for(i=0; i<10; i++){
         *p=i;
         p++;
         }
printf ("O terceiro elemento do vetor e: %d\n",p[2]);

system("PAUSE");    
return 0;
}

Editado por Micheus
Incluída tag's CODE para melhorar a visualização. Utilize a identação também ;)
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

#include <stdlib.h>
#include <stdio.h>
int main ()
{
int matrx [10];
int *p;
int i;
p=matrx;
for(i=0; i<10; i++){
*(p+i)=i;
}
printf ("O terceiro elemento do vetor e: %d\n",p[2]);

system("PAUSE"); 
return 0;
}
nessa parte: *(p+i)=i; isso equivale a p=i; com esse for você esta preenchendo o vetor matrx com os numeros de 0 a 9 mas nesse codigo 1, você não esta alterando o valor de p , ele continua apontando para o primeiro elemento do vetor matrx você não altera o ponteiro p , quando você faz: *(p+0) = 0;//conteudo apontado por p , recebe zero *(p+1)=11;//conteudo apontado por p mais uma posicao(+ 4 bytes, pois inteiro tem 4 bytes) recebe 11 *(p+2)=29;//conteudo apontado por p . mais duas posiçoes( +8 bytes, pois são dois inteiros de 4 bytes) recebe 29 *(p+3)=33;//conteudo apotado por p , mais 3 posiçoes (+12 bytes, pois são 3 inteiros de 4 bytes) recebe 33 não sei si expliquei muito bem, ainda tenho dificuldades com ponteiros... você pode ate colocar um printf e observar os valores nas memoria:
#include <stdlib.h>
#include <stdio.h>
int main ()
{
int matrx [10];
int *p;
int i;
p=matrx;
for(i=0; i<10; i++){
*(p+i)=i;
printf ("%d ",p);//o valor de p vai permancer constante !!!
}
printf ("O terceiro elemento do vetor e: %d\n",p[2]);

system("PAUSE"); 
return 0;
}
você deve ter notado que o valor de p continua o mesmo !! ele ainda continua apontando para o primeiro elemento do vetor matrx e nessa parte: printf ("O terceiro elemento do vetor e: %d\n",p[2]); você ta mandando imprimir o valor apontado por p , mais duas posiçoes... p[2] equivaleria a *(p+2) entendeste???? hehehe já no segundo codigo:
#include <stdio.h>
int main ()
{
int matrx [10];
int *p;
int i;
p=matrx;
for(i=0; i<10; i++){
*p=i;
p++;
}

printf ("O terceiro elemento do vetor e: %d\n",p[2]);

system("PAUSE"); 
return 0;
}
quando você faz p++, você MUDA o valor de p, fazendo ele apontar para as proximas posiçoes... e quando sair do for , o p vai estar apontando para o elemento(lixo de memoria) posterior da ultima posicao do vetor... mas se você fizer assim, vai dar certo:
#include <stdio.h>
int main ()
{
int matrx [10];
int *p;
int i;
p=matrx;
for(i=0; i<10; i++){
*p=i;
printf ("%d ",p);//acrescentei ainda esse printf, você deve notar que dessa vez o valor de p, se altera no decorrer do for...
p++;
}
p=matrx;//tou fazendo o p apontar para o primeira posicao do vetor
printf ("O terceiro elemento do vetor e: %d\n",p[2]);

system("PAUSE"); 
return 0;
}

Editado por darkchrono
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...