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

suzy

ponteiros

16 mensagens neste tópico

:wallbash: tou a começar com ponteiros

como e façoa isto?

Desenvolva uma função de nome calculo que receba por parâmetro dois inteiros A e B e

dois ponteiros para inteiro P e Q.

A função deve calcular a subtracção entre os dois inteiros e

colocar a diferença no local referenciado por P. Deve igualmente calcular a adição dos dois

inteiros e colocar a soma no local referenciado por Q.

2.1. Escreva uma função main() que lhe permita testar a função calcula desenvolvida

anteriormente*/

:-[

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:-[ será assim=?

#include<stdio.h>

int calcula(int a, int b, int  *p, int *q)
  {
   int *soma;
   p=&a;
   q=&b;
   *soma= *p+*q;
   return *soma;
   }

   main()
   {
   int a, b,*total;
   printf(" introduza os valores\n");
   scanf("%d%d",&a,&b);
   *total=calcula(a,b);
   printf(" %d\n",*total);
   fflush(stdin);
   getchar();
   }

nao funciona :S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

mais tipo:

void calcula(int a, int b, int  *p, int *q)
{
     *p = a-b;
     *q = a+b;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não podes colocar

*p = a+b; porquê?

Repara que a e b são dois inteiros, não são dois ponteiros.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:-[têm razão, desculpem, pensava que era ponteiros  :-[

  outra questão!

 





void main()
{
int a=4, b=10;
int *p;
p=&a;
p=p+1;

.....

}

Este codigo tem um erro grave, esse erro grave é em relação a linha em que p=p+1 não é??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não existe qualquer problema ai. Essa linha está correcta. Estás a avançar o ponteiro para o proximo inteiro.

Que erro dá? Não será em outro bocado de código?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Existir existe pois em vez de incrementar o valor de a, vai incrementar o valor da posição de memória de a. Não sei se era a isto que te referias...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não é propriamente um erro. É uma operação perfeitamente normal. Se de facto é pretendido ser essa operação ou não, isso já é com o programador.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

;) isso e um problema de exame

alguma coisa tem de tar errada, não?  :eek:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:-[penso que como p=&a, vai buscar o seu endreçeo

logo p=p+1; tou a incrementar mais uma posição de memoria e nao o valor, penso eu  :shocking:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

;) isso e um problema de exame

alguma coisa tem de tar errada, não?  :eek:

Depende da pergunta do exame, sem mais informações não podemos dizer nada. Tal como o shumy disse tecnicamente está correcto, agora se quiseres aceder ao valor da variável em vez do endereço aí já é outra história.

EDIT:

:-[penso que como p=&a, vai buscar o seu endreçeo

logo p=p+1; tou a incrementar mais uma posição de memoria e nao o valor, penso eu  :shocking:

Ora exactamente. :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não é propriamente um erro. É uma operação perfeitamente normal. Se de facto é pretendido ser essa operação ou não, isso já é com o programador.

Exactamente, essa pergunta não faz sentido num exame...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Até digo mais, com uma probabilidade relativamente alta, "p" ficaria a apontar para "b".

Uma vez que "a" e "b" foram declaradas praticamente ao mesmo tempo, é bastante provável ficarem em lugares contíguos da memória.

Mas não, programação não funciona à base destas probabilidades..

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