Ir ao conteúdo
  • Cadastre-se

Dúvidas ponteiros..


Pimptech

Posts recomendados

Vejo código assim..


int* var;

e


int *var;

Qual a diferença ?

nenhuma, é a mesma coisa.

eu pessoalmente prefiro a segunda opção pela legibilidade, já que

int* num1, num2;

pode parecer que num1 e num2 são ponteiros para int, em quanto apenas num1 é um ponteiro, e num2 é um INT de verdade, em quanto

int *num1, num2;

fica mais fácil a leitura que apenas num1 é um ponteiro

Outra coisa. Quando eu faço isso aqui:


*vari = &var;

Porque ta errado ?

Quando o * deve ser usado na frente ?

Desde já agradeço, grande abraço!

* deve ser usado na frente quando você quer acessar um ponteiro como se fosse uma variavel local (e não o endereço de memória qual ele aponta)

a linha em si não está errada. vamos a alguns exemplos


int *p;
int num = 4;
p = # // pega a posição de memória de num e armazena no ponteiro p;
*p = 5; // vai na posição de memória apontada em p e grava o numero 5
printf("%d", num); // o numero que irá aparecer na tela é 5, já que p apontava para num

o "problema" da linha

*vari = &var;

é que ela diz, vá na posição de memória apontada por vari e armazene a posição de memória de var, então a variavel vari, tem de ser um ponteiro para ponteiro, e apontar para um ponteiro

em código


int *p;
int **vari;
int var;
vari = &p; // o ponteiro para ponteiro vari, vai armazenar a posição de memória da variável ponteiro p
*vari = &var; // vai na posição de memória apontada por vari (que é o ponteiro p) e armazena a posição de memória de var
então
**vari = 1; // acessa a posição de memória contida em vari, (o ponteiro p) e vai na posição de memória apontada por esse local (posição de memória apontada por p, que é var) e armazena o valor 1; agora var vale 1
*p = 2; //agora var vale 2

Link para o comentário
Compartilhar em outros sites

Complicado mas, entendi.

Brigadão H1GHL4ND3R!

Abraço!

infelizmente é complicado sim, e acima disso, confuso, até hoje não conheci ninguém que não sofreu pra entender esses conceitos ainda mais sua representação em C, é por isso que as linguagens de maior nível, como Java, C# etc, ocultam do usuário a manipulação de ponteiros, eles ainda existem (afinal eles que dão a grande versatilidade aos processadores e linguagens de programação). Isso tudo com intuito que o programador trabalhe mais resolvendo o problema do que codificando a resolução do problema.

Boa Sorte qualquer duvida estamos aqui!

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para 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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!