Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal,
Sou novo aqui no fórum e venho com uma dúvida.
Já tenho uma boa noção de C e como funcionam os ponteiros, e também de passagem por valor e por referência numa função, que quando a passagem e por valor a variável original não é modificada dentro da função, apenas e copiada para a função e que quando a passagem e por referência (que acontece com vetores, matrizes, registros e usando ponteiros) o endereço da váriavel original é passado e modificado diretamente na função ou seja, o valor original é modificado.
Até aí tudo bem. Eu consegui entender perfeitamente o conceito da passagem por referência de ponteiros, como neste exemplo bobo (coloquei comentários):
alteraValor (int *num){ // o endereco da variavel x é recebido no ponteiro num, que agora aponta pra x
*num = 10; // o ponteiro num modifica o valor de x para 10, pois ele aponta pra x
}
int main(){
int x = 5;
alteraValor(&x); // o endereço da variavel x é passado para a funcao (mais especificamente, para o ponteiro da lista de parametros)
return 0;
}void alteraValor (int **x, int *y){ // o que **x está recebendo do endereco de x, quando se declara assim?
*x = *y;
}
int main(){
int *y = 25;
int *y = 25;
alteraValor (&x, &y);
return 0;
}
O que acontece quando se passa, pra uma função, **x, qual a diferença para *x? O ponteiro não contém apenas um endereço? Eu não consigo ver a diferença entre os dois. Pra onde **x está apontando?
Eu vi isso em um exemplo de lista simplesmente encadeada (estou me adiantando, já que vou ter Estrutura de Dados em C no 2 semestre), e a cabeca (que é um ponteiro struct que aponta pro registro de produtos), na funcao de inserir novos nós na lista, estava declarada como **cabeca. Foi aí que não entendi o porque. Pra quem quiser dar uma olhada no exemplo, segue: http://www.inf.ufg.br/~vagner/pub/CursoC/c.html.
Agradeço qualquer ajuda.
Carregando comentários...