Ir ao conteúdo
  • Cadastre-se

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


Visitante

Posts recomendados

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;
}
 
Link para o comentário
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].

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...