1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Alguns problemazitos em C sobre apontadores :)

Discussão em 'Programação' iniciada por marzvolta, 21 de Janeiro de 2004. (Respostas: 26; Visualizações: 1955)

  1. marzvolta

    marzvolta What is folding?

    #include stdio.h (n csg por os < >'s )

    void func(int **p1,int *p2){
    *p2 = 2 * *p2;
    *p1 = p2;
    }

    int main(){

    int a=3,b=5,c;
    int *p1 = &a;
    int **p2;
    p2 = &p1;
    func(p2,&b);
    c = **p2;
    printf("%d %d %d\n",a,b,c);
    return 0;
    }

    _____________________________________
    estou com algumas dificuldades em perceber este programa, kero determinar o output, sei qual é a solução, mas nao percebo como lá chegar... será que me podiam dar uma ajudinha ??? agradecido:001:
     
    Última edição: 21 de Janeiro de 2004
  2. fap

    fap Power Member

    o teu código é um bocado para o mau... :(

    o que não percebes?

    porque é que tens um #include de nada?!

    se não me escapou nada (com um código desses é possível ;) ) após a chamada a func() vais ter algo como:

    b vai ter 10
    p1 vai ter &b
    p2 aponta para p1
    c vai ter 10

    fazes printf e deve-te sair
    a=3
    b=10
    c=10

    espero não me ter escapado nada mas a olhar assim de relance é o que me parece

    quanto ao quereres lá chegar, fiz um reformat ao código (nomes das variáveis confusos na funcao func()) e ele faz isto...
    int *p1 = &a; p1 fica com o endereco de a
    p2 = &p1; p2 fica a apontar para p1 (q aponta para a)
    dentro da funcao func (mudei os args, passa a receber int** p2, int* p) so para se perceber melhor os nomes)

    *p = 2 * *p; *p é o b, logo b vai ter 10 (2*5)

    *p2 = p; *p2 é o p1... logo metes p1 a apontar para p (p1 passa a apontar para b)

    retornas da funcao...

    c = **p2; p2 continua a apontar para p1 q por sua vez aponta para b...logo c tem 10...

    como nao mudaste o a, a=3
     
    Última edição: 21 de Janeiro de 2004
  3. marzvolta

    marzvolta What is folding?

    o código nao é meu, é de uns problemas para praticar :)
    acertaste na resposta :) logo nao te escapou nada, o facto de serem apontadores de apontadores é que me baralham todo
    thx pela ajuda
     
  4. fap

    fap Power Member

    já agora , é #include <stdio.h> para puderes usar o printf...

    espero que tenha ajudado
     
  5. Tafinho

    Tafinho Power Member

    Ofuscated C ... não têm mais nada que fazer...?
     
  6. fap

    fap Power Member

    eu tava a estudar MC (aka matemática computacional para quem não tá nestas andanças das siglas) mas essa m**** é tão má que vim divertir-me para o forum :D
     
  7. marzvolta

    marzvolta What is folding?

    olhe, peço imensa desculpa se o ofendi sr. tafinho por estar a estudar para um exame e ter conseguido tirar uma duvida aki... visto que com os professores nao vou poder contar ok ? :confused:
    get a life ..
     
  8. Tafinho

    Tafinho Power Member

    Eu não critiquei a pergunta, apenas a inutilidade do pedaço de código...
     
  9. marzvolta

    marzvolta What is folding?

    humm ok . my fault...
    pá a inutilidade toda a gente ve .. mas se nao sei isto. nao passo no exame .. simples :P
     
  10. Madril

    Madril 1st Folding then Sex


    Se ele tá a estudar suponho que esteja a ver coisas genéricas, eu em FP tambem tinha coisas parecidas ... em Scheme ... mas deviam de ser parecidas :P
     
  11. fap

    fap Power Member

    tirando o facto de em IP ou FP ou whatever (a cadeira até se chamava *** mas quiserem mudar o nome nao sei porque :rolleyes: ) nao usares ponteiros nem nada disso (nem sei se scheme o permite, nao me lembro, mas lisp faz umas coisas parecidas)
     
  12. Madril

    Madril 1st Folding then Sex

    Segundo o que entendi das aulas o Scheme tem ponteiros ... mas eu na sou de fiar :P
     
  13. fap

    fap Power Member

    por acaso...é em ip que ensinam a passagem de parâmetros por referência por isso deve ter deve...
     
  14. Madril

    Madril 1st Folding then Sex

  15. marzvolta

    marzvolta What is folding?

  16. fap

    fap Power Member

    sim, no mesmo curso que tu e muito possivelmente até falei contigo na 1ª semana (inscricoes mais primeiras aulas) uma vez que era do mentorado e da CPLEIC :)
     
  17. Madril

    Madril 1st Folding then Sex

    Se viste pelo IST no mes passado um Caloiro parecido com um taliban era eu :P

    Dp temos k fazer o 2º Meet do ppl do IST :P
     
  18. fap

    fap Power Member

    pah durante o último mês não vi nada nem ninguém no IST, só vi o projecto de EP ( quando chegares ao 4º ano vais perceber what I mean) :P

    ya...meeting depois dos exames :)
     
  19. marzvolta

    marzvolta What is folding?

    #include "stdio.h" ( n csg meter os ><'s)

    char xpto(int *a, int *b, int **c, char d){

    *c=b;
    *a=d-'a';
    *b-=*a;
    return d + *b;
    }

    int main() {

    int i,j;
    int *k,*l;
    char c;

    c = 'c';
    i = 9;
    k = &i;
    c=xpto(&j,k,&l,c);
    printf("\n\n\n%d %d %d %d %c\n",i,j,*k,*l,c);

    return 0;
    }

    -----------------
    será que me podiam ajudar a perceber este exercicio ?!!?
    apenas tenho que saber o output do programa. mas n csg perceber o mecanismo dentro da funçao :|
    help me plz
     
  20. fap

    fap Power Member

    mais uma vez alterei o cabecalho da funcao para se perceber bem o que faz...

    #include "stdio.h"

    char xpto(int *j, int *k, int **l, char c){

    *l=k; ponteiro l fica a apontar para o ponteiro k
    *j=c-'a'; inteiro j fica com o valor de c-'a' (fazes conversao de chares para ints e ves qt da)
    *k-=*j; inteiro k fica com o valor do que ja tinha (9) menos o valor de j...
    return c + *k; devolves um char com o valor de c + o valor de k calculado acima
    }

    int main() {

    int i,j;
    int *k,*l;
    char c;

    c = 'c';
    i = 9;
    k = &i; k fica a apontar para um inteiro i
    c=xpto(&j,k,&l,c); invocar a funcao
    printf("\n\n\n%d %d %d %d %c\n",i,j,*k,*l,c);

    return 0;
    }
     

Partilhar esta Página