Ir ao conteúdo
  • Cadastre-se
Visitante

Estou com dúvidas em relação a ponteiros!

Recommended Posts

Visitante

O exercício é esse aí:

 

http://www.decom.ufop.br/alan/bcc702/ponteiros.cpp

 

Eu fiz desse jeito, e tive algumas dúvidas, eu comentei do lado dos códigos para ficar mais fácil!

 

// Copie este arquivo para seu computador. Complete o código fazendo o que é pedido em cada um dos exercícios.
 
#include <iostream> // inclui a biblioteca padrão de entrada (pelo teclado) e saída (pelo monitor)
 
#include <stdio.h> //Eu acho q são essas duas aí!!!
#include <stdlib.h>
 
using namespace std; // indica que funções devem ser procuradas na biblioteca padrão (standard - std)
 
// função principal do programa, que será executada inicialmente
int main(){
    int x;
    int *px;
    px = &x;
 
    cout << "Digite um valor para x: " ;
    cin >> x;
    // Exercicio 1: colocar um cout antes de cada linha explicando o que aconteceu
    cout<<"\nAqui esta imprimindo o valor q esta armazenado na variavel x"<<endl;
    cout << x << endl;
    cout<<"\nAqui esta imprimindo o endereço na q a variavel x está na memoria"<<endl;
    cout << &x << endl;
    cout<<"\nAqui esta sendo imprimido o endereco do ponteiro na memoria"<<endl;
    cout << &px << endl;
    cout<<"\nAqui esta sendo imprimido o ponteiro q esta armazendo o endereco da variavel x"<<endl;
    cout << px << endl;
    cout<<"\nAqui esta sendo imprimido o valor q esta armazenado a variavel x"<<endl;
    cout << *px << endl;
 
    int v[5] = {4, 2, 3, 4, 5};
    cout<<"\nAqui esta sendo imprimido o valor q esta na posicao 0 do vetor"<<endl;
    cout << v[0] << endl;
    cout<<"\nAqui esta sendo imprimido o endereco do vetor na memoria"<<endl;
    cout << v << endl;
    cout<<"\nAqui esta sendo imprimido o endereco do vetor na memoria"<<endl;
    cout << &v << endl;
    cout<<"\nAqui eu n entendi!!!!"<<endl;
    cout << *v << endl;
 
    px = v;
    cout<<"\nAqui esta sendo imprimido o ponteiro "<<endl;
    cout << px << endl;
    cout<<"\nAqui esta sendo imprimido o endereco do ponteiro na memoria"<<endl;
    cout << &px << endl;
    cout<<"\nEsse aqui também n entendi"<<endl;
    cout << *px << endl;
    cout<<"\nEsse aqui eu n entendi"<<endl;
    cout << *(px+1) << endl;
 
    // O código abaixo imprime e soma as potências de 2 até 1000...
int somatorio = 0, aux, i;
for (i=2 ; i < 1000; i*=2){ //Mudei int i=2 e deixei so i=2 e só para n da problema!
cout << i << " + ";
somatorio += i;
aux=i;
}
i=aux;
cout << " = " << somatorio << endl;
// Exercicio 2: A linha abaixo precisou ser comentada, pois causava um erro no programa. Após o for acima, queríamos imprimir o valor final do contador i. Conserte o código para que a linha abaixo possa ser descomentada sem causar um erro.
cout << "Valor final de i = " << i << endl; //Eu tentei colocar uma variavel auxiliar para imprimir o valor final d i, mas n tem outro jeito n? rrsrsrsrs
 
 
    return 0;
}
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

A lib <iostream> é a lib padrão pra input e output em c++. <stdio> e <stdlib> são libs do C. Você não precisa usar elas a menos que vá usar funções como printf() ou malloc().

 

 

    int v[5] = {4, 2, 3, 4, 5};    cout<<"\nAqui esta sendo imprimido o valor q esta na posicao 0 do vetor"<<endl;    cout << v[0] << endl;    cout<<"\nAqui esta sendo imprimido o endereco do vetor na memoria"<<endl;    cout << v << endl;    cout<<"\nAqui esta sendo imprimido o endereco do vetor na memoria"<<endl;    cout << &v << endl;    cout<<"\nAqui eu n entendi!!!!"<<endl;    cout << *v << endl;
A variável V guarda o endereço base do array. Esse endereço base é usado pra acessar os elementos da array.

Por exemplo, o compilador interpreta V[0] como o endereço base mais 0 INTs adiante. Ou seja, é o próprio endereço base, que aponta pra 4.

V[2] é o mesmo que endereço base + 2 INTs adiante, ou seja, o endereço onde o 4 está, caminhando o espaço de dois INTs na memória adiante, que aponta pra 3.

Então se você usar *V você vai estar apenas acessando o endereço base, que é o mesmo que V[0], que é 4.

Se você usar *(V+1), vai estar acessando o endereço base do array + 1 INT a frente, que é o mesmo que V[1], que equivale ao valor 2.

Se usar *(V+2) ---> V[2].

E assim por diante.

    px = v;    cout<<"\nAqui esta sendo imprimido o ponteiro "<<endl;    cout << px << endl;    cout<<"\nAqui esta sendo imprimido o endereco do ponteiro na memoria"<<endl;    cout << &px << endl;    cout<<"\nEsse aqui também n entendi"<<endl;    cout << *px << endl;    cout<<"\nEsse aqui eu n entendi"<<endl;    cout << *(px+1) << endl;
px tá guardando o endereço base do array V, então *px é o mesmo que *V, que é o mesmo que *(V+0), que é o mesmo que V[0].

Usando a mesma lógica, *(px+1) é o mesmo que *(V+1), que é o mesmo que V[1].

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×