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

Incremento Com Ponteiros


Castro

Pergunta

:(

int main()
{
 int x=0, *p;

  clrscr();

  p=&x; /* inicializa a variável ponteiro com endereço de x */

  *p=*p + (*p)++; /*Faz o incremento de *p */

 printf ("O incremento de *p e: %d",*p);

 return (0);
 }

O programa acima, tem como objetivo, incrementar a variável ‘p’. Ok, ele incrementa, e tem como resultado 1.

1 ) O que eu queria entender, é porque tenho que escrever (*p)++; e ao invés de *(p)++; ? se eu fizer isso dá errado. Entretanto, se eu fizer isso com matrizes, da certo.

Ex.

*(matriz + 2);

2) Sabendo, queendereço de memória só permite inteiros sem sinal, posso fazer a operação acima com outros tipos de dados ?

Obrigado,.

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

Respostas:

1. *Pode ser* que o seu compilador está interpretando o seguinte, caso matriz: '* (#Endereço da Matriz#)++'. Se eu estiver certo, pode ser que nem precise do primeiro operador: *

2. Sim. Você está falando disso: 'double *myVar'? No caso, você deve dizer: o endereço da variável é representando por um inteiro sem sinal, mas não importa o tipo desse ponteiro, desde que o mesmo aponte para o tipo de dados esperado. Um int* aponta para int. Um double* aponta para double. Um char* aponta para char. Já um void* é um tipo de ponteiro especial que aponta para qualquer tipo de dado.

Falows!

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

:(

1 ) O que eu queria entender, é porque tenho que escrever (*p)++; e ao invés de *(p)++; ? se eu fizer isso dá errado. Entretanto, se eu fizer isso com matrizes, da certo.

-Explicando a diferença entre

p++; (*p)++; *(p++); *(p+10);?

- p++: incrementa o ponteiro, ou seja o endereço. Após esta instrução, o ponteiro p passará a apontar para a posição de memória imediatamente superior. Se em um vetor, o ponteiro passará a apontar a próxima posição do vetor.

- (*p)++: Incrementa o conteúdo apontado por p, ou seja, o valor armazenado na variável para qual p está apontando.

- *(p++): Incrementa p (como em p++) e acessa o valor encontrado na nova posição. Se em um vetor, esta expressão acessa o valor da posição imediatamente superior a armazenada em p antes do incremento.

- *(p+10) Acessa o valor encontrado 10 posições afrente de p. Neste caso, o apontador não é incrementado. Se em um vetor, irá acessar a décima posição após a que está sendo apontada.

Espero ter ajudado. Para mais, consulte o site da UFMG, tem uma apostila boa lá!

Filipe

"A excelência do conhecimento é compartilhar o que se sabe sem temer a competição"

Link para o comentário
Compartilhar em outros sites

  • 0

A apostila que tenho não é de minha autoria, não posso publicar algo que não é meu, veja que meu e-mail está na minha assinatura, me envie um e-mail, apenas eu saberei seu e-mail e te enviarei a apostila, não precisa se preocupar, a equipe de moderação do scriptbrasil é de confiança.

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
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...