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

Entendimento sobre ponteiros de ponteiros


maginot

Pergunta

Olá pessoal, estou estudando C e um assunto que achei muito interessante é sobre os pointers.

Algumas duvidas me apareceram ao formar o seguinte codigo:

#include <stdio.h>


int main() {

        int static var = 5;
        int static *var_ptr;
        int static **var_ptr2;

        var_ptr = &var;
        var_ptr2 = &var_ptr;
        
        
        printf("  var_ptr  p= %p\n", var_ptr);
        printf("  var_ptr2 p= %p\n", var_ptr2);
        printf(" *var_ptr2 p= %p\n", *var_ptr2);
        printf("**var_ptr2 d= %d\n", **var_ptr2);
        
                
        return(0);

}

se tenho var_ptr2 sendo um pointer do pointer *var_ptr então quando imprimo printf(" var_ptr2 p= %p\n", var_ptr2); eu na verdade estou imprimindo o endereco do pointer var_ptr e não do pointer var_ptr2, certo ??

Alem disso, outra duvida analisando os endereços da memória é se quando ele imprime algo como 0x8049628 na verdade é o endereco da memoria dentro da area do programa executado ou é a area da memoria fisica real do computador (logo se eu lesse 0x8049628 em /dev/mem encontraria o int de 5)?

Essa segunda duvida me surgiu pois apos executar varias vezes o mesmo programa vi que a saida se mantinha a mesma, então fiquei pensando se não seria o endereco dentro do espaco do programa, logo um offset dentro da memoria real.

Espero que possam me ajudar.

[ ]'s

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Olá.

Vamos por partes...

se tenho var_ptr2 sendo um pointer do pointer *var_ptr então quando imprimo printf(" var_ptr2 p= %p\n", var_ptr2); eu na verdade estou imprimindo o endereco do pointer var_ptr e não do pointer var_ptr2, certo ??

Se você imprimir var_ptr2, obterá o endereço de var_ptr; se mandar imprimir o endereço de var_ptr2, você obterá o endereço de var_ptr2.

Alem disso, outra duvida analisando os endereços da memória é se quando ele imprime algo como 0x8049628 na verdade é o endereco da memoria dentro da area do programa executado ou é a area da memoria fisica real do computador (logo se eu lesse 0x8049628 em /dev/mem encontraria o int de 5)?

Supondo 0x8049628 como endereço de memória, esse valor em hexadecimal representa um local da memória do computador. Um programa não tem memória, mas sim o computador no qual você está executando esse programa.

Dependendo da linguagem e do compilador com os quais você esteja utilizando, o valor contido nesse endereço de memória será apagado (Garbage Collection)

[;)]

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,2k
    • Posts
      652k
×
×
  • Criar Novo...