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

Ponteiro duvidas


viciado

Pergunta

15 respostass a esta questão

Posts Recomendados

  • 0
1) Como ler um ponteiro ? scanf("%d",&p); ?

Nesse canf() você passa a referência de uma variável. Isso significa que scanf poderá modificar a variável original.

2) Como posso somar dois ponteiros ?
A aritmética de ponteiros existe para acessar elementos diretamente pela sua posição. Não faz sentido, portanto, somar ponteiros pura e simplesmente. Faria sentido sim, somar os conteúdos de dois ponteiros. Exemplo: *ptr1 + *ptr2.

3) Como passo um ponteiro para função e como retorno um ponteiro de uma função ?

Se você tem uma variável ponteiro, apenas informe seu nome como argumento da função chamada, desde que esta, em seu protótipo, exiga um ponteiro, claro. Exemplo: foo(ptr1). Mas lembre-se de que você também pode passar uma variável por referência, conforme o exemplo de scanf(), acima.

Para retornar um ponteiro, se o protótipo desta função assim definir, apenas retorne o nome da variável em questão. Exemplo: return ptr1.

Link para o comentário
Compartilhar em outros sites

  • 0

As operações de soma, subtração, divisão e multiplicação com ponteiro é assim ? porque divisão da 0 ?

#include <stdio.h>
#include <stdlib.h>

int main()
{
  int *p1, *p2, x, y;
  printf("Informe os valores de x e y \n");
  scanf("%d %d",&x, &y);
  p1 = &x;
  p2 = &y;
  printf("Soma: %d \n",(*p1+*p2));
  printf("Subtracao: %d \n",(*p1-*p2));
  printf("Multiplicacao: %d \n",((*p1) * *(p2)));
  printf("Divisao: %f \n",(*p1 / *p2));
  system("PAUSE");    
  return 0;
}

Link para o comentário
Compartilhar em outros sites

  • 0

Nem poderia ser diferente. Você quer exibir um inteiro como float sem fazer o devido cast. Troque a divisão por printf("Divisao: %f \n",(float)*p1 / (float)*p2);. Note que você até poderia fazer o cast apenas no resultado, mas daí você só veria a parte inteira do cálculo.

Link para o comentário
Compartilhar em outros sites

  • 0

Por o mesmo programa feito com função está errado ? "invalid type argument of 'unary *'

#include <stdio.h>
#include <stdlib.h>

int soma(p1, p2){
    return (*p1 + *p2);
}
int subtracao(p1, p2){
    return (*p1 - *p2);
}
int mult(p1, p2){
    return ((*p1) * (*p2));
}
float div(p1, p2){
      return (*p1 / *p2);
}
int main()
{
  int *p1, *p2, x, y;
  printf("Informe os valores de x e y \n");
  scanf("%d %d",&x, &y);
  p1 = &x;
  p2 = &y;
  printf("Soma: %d \n",soma(p1,p2));
  printf("Subtracao: %d \n",subtracao(p1,p2));
  printf("Multiplicacao: %d \n",mult(p1,p2));
  printf("Divisao: %f \n",div(p1,p2));
  system("PAUSE");    
  return 0;
}

Link para o comentário
Compartilhar em outros sites

  • 0

Não consegui resolver o problema do cast na função divisão

#include <stdio.h>
#include <stdlib.h>

int soma(int *p1,int *p2){
    return (*p1 + *p2);
}
int subtracao(int *p1,int *p2){
    return (*p1 - *p2);
}
int mult(int *p1, int *p2){
    return ((*p1) * (*p2));
}
float div(int *p1,int *p2){
      return((float)*p1 / (float)*p2);
}
int main()
{
  int *p1, *p2, x, y;
  printf("Informe os valores de x e y \n");
  scanf("%d %d",&x, &y);
  p1 = &x;
  p2 = &y;
  printf("Soma: %d \n",soma(p1,p2));
  printf("Subtracao: %d \n",subtracao(p1,p2));
  printf("Multiplicacao: %d \n",mult(p1,p2));
  printf("Divisao: %f \n",div(p1,p2));
  system("PAUSE");    
  return 0;
}

Link para o comentário
Compartilhar em outros sites

  • 0
O problema era que div já é reservado na biblioteca stdlib.

Não se reserva palavra por header. Acabei de testar aqui e seu código não tem erro algum.

Como eu posso inverter uma string utilizando ponteiro ?

Acessando o conteúdo inversamente. Veja qual o tamanho da string, some o valor ao ponteiro e vá voltando numa malha.

Link para o comentário
Compartilhar em outros sites

  • 0

Tentei fazer mais o programa não funcionou trava

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
  char *p, str[20];
  printf("Digite string \n");
  fgets(str, 20, stdin);
  int tam = strlen(str);
  p = &str;
  int i;
  for(i=0;i<tam;i++){
                     printf("%s",*p);
                     *p--;
                     }
  system("PAUSE");    
  return 0;
}

Link para o comentário
Compartilhar em outros sites

  • 0

p = &str está errado. Nem deve compilar. str já é um ponteiro. Você deve apenas copiar str para p. Ponteiro para ponteiro.

O programa trava porque o loop vai ao infinito, já que i começa com 0 e vai sendo incrementado. Seu iterador i é inicializado de forma errada. Você não quer imprimir invertido? Então troque a malha inicializando com i=tam, troque o teste por i>=0 e ajuste o iterador com i--. Na impressão também tem erro. Não use %s, que é para string. Use %c (caractere), indicando o conteúdo do ponteiro com *(p+i).

Link para o comentário
Compartilhar em outros sites

  • 0

Não inverteu a string

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
  char *p, str[20];
  printf("Digite string \n");
  fgets(str, 20, stdin);
  int tam = strlen(str);
  p = str;
  int i;
  for(i=0;i<tam;i++){
      printf("%s",p);
      p--;
     }
  system("PAUSE");    
  return 0;
}

Link para o comentário
Compartilhar em outros sites

  • 0

Claro que não. A malha está do mesmo jeito.

Quando você escrever uma malha desse tipo, observe qual o fluxo dos dados. Perceba como o ponteiro vai andar. Vou dar uma ajudinha. Seu iterador começa em zero. Deveria começar no final e não no começo. E se vai inverter, é natural que o iterador seja decrementado e não incrementado, como está agora. Sendo assim, quando a malha acaba? Quando o iterador for menor que zero.

E outra: você não precisa mexer no valor do ponteiro, já que está usando um iterador. Use o ponteiro apenas para acessar o caractere.

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