Pergunta

Eu sei que ponteiros armazenar o endereço do valor que eles apontam para, mas se você exibir o valor de um ponteiro diretamente para a tela, você recebe um número hexadecimal. Se o número é exatamente o que as lojas de ponteiro, em seguida, ao dizer

pA = pB; //both are pointers

você está copiando o endereço. Então não haveria uma maior sobrecarga para usando ponteiros quando se trabalha com itens muito pequenos, como ints e bools?

Foi útil?

Solução

Um ponteiro é essencialmente apenas um número. Ele armazena o endereço na RAM, onde os dados são. O ponteiro em si é bastante pequeno (provavelmente o mesmo tamanho que um int em 32 bit arquitecturas, long em 64 bits).

Você está correto no entanto, que um int * não iria salvar qualquer espaço quando se trabalha com ints. Mas isso não é o ponto (sem trocadilhos). Os ponteiros são lá assim que você pode ter referências para as coisas, e não apenas usar as coisas si mesmos.

Outras dicas

Os endereços de memória.

Essa é a localização em memória onde outras coisas é .

Os ponteiros são geralmente o tamanho da palavra do processador, então eles geralmente podem ser movimentados em um único ciclo de instrução. Em suma, eles são rápidos.

Como já foi dito, um ponteiro armazena um endereço de memória que é "apenas um número', mas que é uma abstração. Dependendo da arquitetura do processador pode ser mais do que um número, por exemplo, uma base e deslocamento que deve ser adicionado ao cancelar o ponteiro. neste caso, a sobrecarga é ligeiramente maior do que se o endereço é um número único.

Sim, não há sobrecarga de acesso a um int ou um booleano através de um ponteiro comparada directamente, onde o processador pode colocar a variável num registo. Os ponteiros são geralmente utilizados quando o valor da dissimulação supera qualquer sobrecarga, isto é, uma matriz de deslocamento.

Eu estive referindo-se a sobrecarga de tempo. Não tenho certeza se OP foi espaço ou tempo mais preocupado em cima.

O número refere-se ao seu endereço na memória. O tamanho de um ponteiro é tipicamente o tamanho nativo da arquitectura do computador, de modo que não há sobrecarga adicional em comparação com qualquer outro tipo primitivo.

Em algumas arquiteturas há uma sobrecarga adicional de ponteiros para caracteres porque a arquitetura suporta apenas palavras de endereçamento (valores de 32 ou 64 bits). Um ponteiro para um personagem é, portanto, armazenado como um endereço de palavra e um deslocamento do personagem dentro dessa palavra. De-referenciando o ponteiro envolve buscar a palavra e, em seguida, deslocando e mascarando-o de valor para extrair a personagem.

Um endereço na memória. Aponta para algum lugar! : -)

Deixe-me começar do básico. Primeiro de tudo, você tem que saber o variável são e como eles são usados.

Variáveis ?? são basicamente locais de memória (geralmente contendo alguns valores) e usamos um identificador (ou seja, nomes de variáveis) para se referir a esse local de memória e usar o valor presente naquele local.

Para entendê-lo melhor, suponha que deseja que as informações a partir de células de memória presentes em algum local em relação à variável atual. podemos usar o identificador para extrair informações a partir de células próximas? No. Porque o identificador (nome da variável) só irá dar o valor contido nessa célula particular.

Mas, se de alguma forma podemos obter o endereço de memória em que esta variável está presente, então podemos facilmente mudar para locais próximos e usar suas informações, bem como (em tempo de execução).

Este é o lugar onde ponteiros entram em jogo. Eles são usados ??para armazenar a localização dessa variável, para que possamos utilizar a informação de endereço adicional sempre que necessário.

Sintaxe:. Para armazenar o endereço de uma variável que pode simplesmente usar & (endereço-de) operador

foo = &bar 

Aqui lojas foo o endereço do bar variável.

Agora, e se queremos saber o valor presente nesse endereço?

Para isso, pode simplesmente usar o operador * (dereference) .

value = *foo

Agora que temos para armazenar o endereço de uma variável, estaremos precisando a memória da mesma forma que nós precisamos no caso de uma variável. Isto significa ponteiros também são armazenados na memória da mesma forma que outras variáveis, assim como no caso de variáveis, que também pode armazenar o endereço de um ponteiro em mais um ponteiro.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top