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

Ponteiros em C++


Castro

Pergunta

:wacko:

Considere o código:

#include <iostream>
using namespace std;
int main()
{
  int *ipr, i=10;
  double *vpr,v=5.2;;
  ipr=&i;
  vpr=&v;
  
  cout << "Mostre o valor de i : " << i << endl;
  cout << "Entre com novo valor de i via *ipr: ";
  cin >> *ipr;
  

  cout << "Mostre o novo valor de i : " << i << endl;
  cout << "Mostre o valor de ipr : " << ipr << endl;
  cout << "Mostre o valor de *&ipr & e * (se anulam): " << *&ipr << endl;
  cout << "Mostre o valor de &vpr  : " << &ipr << endl;
  cout << endl;
  system ("pause");
  return 0;
}
1- Se &ipr mostra um endereço em hexadecimal, o que representa o valor hexadecimal mostrado por ipr ? lixo ? 2- Como a própria linha diz:
cout << "Mostre o valor de *&ipr & e * (se anulam): " << *&ipr << end;

se anulam e mostram o mesmo valor de ipr. O que isto quer dizer ?

Obrigado

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Saudações,

Veja um exemplo simples:

cout << "Endereço de i : " << &i << 
          "Valor de i "      << i  << endl;
  cout << "Endereço para qual o ponteiro aponta : " << ipr   << 
          "Endereço do ponteiro (variável) : "      << &ipr  << 
          "Valor de onde o ponteiro aponta : "      << *ipr  << endl;

Abraços,

William Rodrigues.

Editado por William Rodrigues
Link para o comentário
Compartilhar em outros sites

  • 0

:rolleyes:

Considere a declarção:

int vet[5];
int *v;

v=vet;
Se eu fizer:
cout << v << end;
verei um endereço de memória. se eu fizer:
cout << &v << end;

verei um endereço de memória diferente. Em se tratando de arrays, qual a diferença nestes dois casos ? o que etá sendo mostrado em um caso e outro ?

Obrigado

Link para o comentário
Compartilhar em outros sites

  • 0

v é um ponteiro e o seu conteúdo é um endereço de memória, mas esse endereço tem que ser armazenado em algum lugar da memória.

cout << *v << endl;          // Valor contido na primera posição apontada por v ( vet[0])
cout << v << endl;           //  Endereço que v aponta
cout << &v << endl;          // O endereço de v na memória.

Link para o comentário
Compartilhar em outros sites

  • 0

:mellow:

Ok. Entendi. Funciona da mesma forma como não se fosse vetor.

Considere o seguinte fragmento de código:

int *p;
int var;

p=&var;

p++;
No fragmento de código, a linha
p++

faz um incremento na posição de memória, ou seja faz uma aritmética de ponteiros. Li que esta opração só faz sentido se for feita com array, pois há uma posição consecultiva na memória. No exemplo acima isso não acontece.

Temos apenas um endereço de memória que sofre um incremento. Segundo alguns autores, fazer este incremento seria errado, pois não se sabe para que região de memória vai ser apontada. Poderiam comentar ? isso procede ? se isso é verdade, por que alguns livro dão exemplos como estes ?

Obrigado

Link para o comentário
Compartilhar em outros sites

  • 0

Não diria que é errado, mas sim inseguro de se fazer isso. Pode-se acabar em um local da memória que não pode ser acessado e o programa terminar com umAccess violation.

No caso que você citou de um vetor, não tem problema, desde que não extrapole o tamanho desse vetor.

Até é possível prever para que região ele vai apontar, pois quando declaramos que um ponteiro é int, e sabemos que o int ocupada 4 bytes, sabemos que ele vai pular contiguamente de 4 em 4 bytes na memória, para tipos básicos é isso.

Link para o comentário
Compartilhar em outros sites

  • 0

:rolleyes:

Ok. Obrigado, mas poderia comentar a linha:

cout << "Mostre o valor de *&ipr & e * (se anulam): " << *&ipr << end;

Li que usar *& se anulam e mostram o mesmo valor de ipr. O que isto quer dizer ? de quem é o valor mostrado, realmente, na linha acima ?

Obrigado

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...