Alguns problemazitos em C sobre apontadores :)

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:
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:
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
 
Originally posted by marzvolta
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

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

espero que tenha ajudado
 
Originally posted by Tafinho
Ofuscated C ... não têm mais nada que fazer...?

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
 
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 ..
 
Originally posted by marzvolta
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 ..

Eu não critiquei a pergunta, apenas a inutilidade do pedaço de código...
 
Originally posted by Tafinho
Eu não critiquei a pergunta, apenas a inutilidade do pedaço de código...


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
 
Originally posted by Madril
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

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)
 
Originally posted by Madril
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

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 :)
 
#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
 
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;
}
 
Back
Topo