• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

suzy

valores de ponteiros

4 mensagens neste tópico

viva!

tou com duvidas em como se obtêm o valor 1 e o valor 0 :eek:. porque e que me da isso?

#include<stdio.h>
#define L 4
#define C 2


main()
{
int i, a[L][C]={1,1,2,2,3,3,4,4};
int *p = a[3] + 1;
int *q= a[1];
printf(" %d",*p); // da 4
printf(" %d",*q);// 2

while(p>=q){
      if(*p % *q == 0)
     *p=0;
     else
    *p=*q;
     p--;
}
printf(" %d",*p);// da 1 nao sei porque????????????
printf(" %d",*q);// da 0 nao sei porque??????????

}

obrigada

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se não me enganei, vais chegar ao fim com o array:

1 1 0 0 2 2 0 0

E com p a apontar para a posição a segunda posição, e o q a apontar para a terceira.

Isto porque o p vai percorrer as posições do array desde a última até à segunda, e nas posições onde estava 3 põe o valor apontado por q (2), e nas posições onde estava 2 ou 4, passa-as para 0. O ciclo vai parar quando o p aponta para uma posição (de memória) inferior ao q (como o q aponta para a terceira posição, o p pára quando apontar para a 2ª).

Dava jeito indicares qual é o objectivo da aplicação, para saber o que é que poderá estar mal.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vou tentar mostrar 2 pormenores interessantes no teu código que podem fazer com que não percebas o resultado final....

while(p>=q){

O que estás a comparar aqui são os endereços, e não os valores existentes naqueles endereços,ou seja  p é diferente de *p.

Um outro pormenor interessante é :

if(*p % *q == 0)
    *p=0;
else
    *p=*q;
p--;

O else não possui chavetas,  tanto no if como no else irá sempre decrementar p.

Espero que isto te ajude... 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu aconselho-te a fazeres debug... passo a passo... em que metes no watch o *p, *q, p e q .. e até podes ver a janela de memória (se o programa que usas der para ver...). E vês tudo a acontecer... os valores a alterarem na memória e deve ajudar-te a perceber o que anda a acontecer.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora