Ponteiro para endereco de ponteiro [RESOLVIDO]

1. Ponteiro para endereco de ponteiro [RESOLVIDO]

Bruna Almeida
FennFelis

(usa Ubuntu)

Enviado em 16/08/2012 - 00:38h

tenho um ponteiro global (lista), como posso fazer para mexer nessa lista utilizando somente variaveis temporárias na funcao?


  


2. Re: Ponteiro para endereco de ponteiro [RESOLVIDO]

cr0n
_di0

(usa FreeBSD)

Enviado em 16/08/2012 - 00:59h

Não entendi muito bem sua pergunta, mas se já tem um ponteiro apontando para algum dado na memória e quer criar um ponteiro que aponte para esse ponteiro, criando níveis de apontamento, você precisa de um ponteiro duplo ou seja, um ponteiro para ponteiro.


int foo = 1, bar = 2;

int *p; // ponteiro de inteiro

int **pp; // ponteiro que aponta para ponteiro de inteiro

p = &foo;

pp = &p; // pp armazena endereço de p

pp aponta para p, pode desreferenciar o valor de p da forma padrão, **pp ( desferenciando o valor apontado por p, 1 no caso)



3. Re: Ponteiro para endereco de ponteiro [RESOLVIDO]

Bruna Almeida
FennFelis

(usa Ubuntu)

Enviado em 16/08/2012 - 01:09h

_di0 escreveu:

Não entendi muito bem sua pergunta, mas se já tem um ponteiro apontando para algum dado na memória e quer criar um ponteiro que aponte para esse ponteiro, criando níveis de apontamento, você precisa de um ponteiro duplo ou seja, um ponteiro para ponteiro.


int foo = 1, bar = 2;

int *p; // ponteiro de inteiro

int **pp; // ponteiro que aponta para ponteiro de inteiro

p = &foo;

pp = &p; // pp armazena endereço de p

pp aponta para p, pode desreferenciar o valor de p da forma padrão, **pp ( desferenciando o valor apontado por p, 1 no caso)


Eu entendi +- oq vc quis dizer, o que eu queria saber é se, por exemplo:

#include <stdio.h>
struct data{
int i;
struct data *prox;
};

struct data *ptglobal;

void Aloca(){
ptglobal=malloc(sizeof(struct data));
ptglobal->i=-1;
ptglobal->prox=NULL;
}

void func1(int x){
struct data *aux;

aux=ptglobal->prox;
aux=malloc(sizeof(struct data));
aux->i=x;
aux->prox=NULL;
//A questão é por que aux não adiciona o nó ao ptglobal?
}

int main(){
Aloca();

func1();

return 0;
}



4. Re: Ponteiro para endereco de ponteiro [RESOLVIDO]

cr0n
_di0

(usa FreeBSD)

Enviado em 16/08/2012 - 21:59h

Vários erros ai, chamada pra função sem parametrização correta, sem um correto casting na hora de alocar memória, você não libera memória posteriormente ao uso, você não inclui a lib para trabalhar com alocamento, estude isso antes de tentar resolver o problema de estruturas como lista, se seu professor da faculdade lhe passou esse exercício, peça para ele lhe explicar novamente, pois você está dificuldades.


5. Re: Ponteiro para endereco de ponteiro [RESOLVIDO]

Bruna Almeida
FennFelis

(usa Ubuntu)

Enviado em 17/08/2012 - 00:58h

_di0 escreveu:

Vários erros ai, chamada pra função sem parametrização correta, sem um correto casting na hora de alocar memória, você não libera memória posteriormente ao uso, você não inclui a lib para trabalhar com alocamento, estude isso antes de tentar resolver o problema de estruturas como lista, se seu professor da faculdade lhe passou esse exercício, peça para ele lhe explicar novamente, pois você está dificuldades.


isso era somente um exemplo, casting na hora de alocar memoria?
vc diz aux = (struct data*) malloc(sizeof(struct data)) ?


6. Re: Ponteiro para endereco de ponteiro [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 17/08/2012 - 18:29h

Em C não é necessário fazer cast do valor devolvido por malloc(), pois um void * é como um coringa, conversível automaticamente para qualquer outro tipo de ponteiro. Só se precisaria de malloc() se a variável que recebe o valor devolvido fosse de um tipo não-ponteiro, como int ou long.

C++ difere de C neste ponto. Em C++ o cast seria necessário. Mas a ideia é que em C++ não se deveria usar malloc(), mas sim o operador new, ou uma classe de container, como std::vector ou std::list.


7. Re: Ponteiro para endereco de ponteiro [RESOLVIDO]

cr0n
_di0

(usa FreeBSD)

Enviado em 17/08/2012 - 22:34h

É, se acontecer isso que aconteceu de não colocar a lib do malloc em um projeto com n arquivos você teria uma boa dor de cabeça se não tivesse realizado o casting, o compilador entenderia que o retorno de malloc é um inteiro. Há algumas controversas em se usar o casting, mas para evitar o ocorrido, observe em códigos de terceiro, inclusive os abertos disponíveis em seu Linux que todos praticam justamente por isso. Talvez hoje isso seja estupides em se tratando de ANSI C compiler, ao contrário de arquiteturas antigas.


http://thomas-cokelaer.info/blog/2011/10/malloc-and-casting/





8. Re: Ponteiro para endereco de ponteiro [RESOLVIDO]

Bruna Almeida
FennFelis

(usa Ubuntu)

Enviado em 19/08/2012 - 21:35h

Vlw paulo pela explicação

_di0 escreveu:

É, se acontecer isso que aconteceu de não colocar a lib do malloc em um projeto com n arquivos você teria uma boa dor de cabeça se não tivesse realizado o casting, o compilador entenderia que o retorno de malloc é um inteiro. Há algumas controversas em se usar o casting, mas para evitar o ocorrido, observe em códigos de terceiro, inclusive os abertos disponíveis em seu Linux que todos praticam justamente por isso. Talvez hoje isso seja estupides em se tratando de ANSI C compiler, ao contrário de arquiteturas antigas.


http://thomas-cokelaer.info/blog/2011/10/malloc-and-casting/




Acontece _di0 que o meu problema é sobre o ponteiro da lista que nunca se atualiza em uma função






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts