Dependendo de quem você perguntar, os ponteiros são uma bênção ou uma maldição. Ponteiros fornecem um mecanismo para acessar diretamente e objetos e código de modificação na memória. Os ponteiros são usados em muitas linguagens de programação para manipular cadeias de caracteres, passar parâmetros para funções , manipulação matrizes de dados e criação de listas ligadas e outras estruturas de dados complexas . Enquanto ponteiros lhe proporcionar uma grande flexibilidade para o gerenciamento de memória e otimização de algoritmos , há desvantagens . Aprender a usar ponteiros é difícil para muitos programadores, e problemas ponteiro depuração é um desafio. Otimização
Ponteiros fornecem uma vantagem de desempenho , permitindo que você acesse a memória do computador diretamente. Em um programa de computador, a maneira mais rápida de acessar e modificar um objeto é acessar diretamente a memória física onde o objeto está armazenado. Esta técnica é comumente usado para otimizar os algoritmos que requerem acesso freqüente ou repetitiva a grandes quantidades de dados.
Segurança
acesso direto à memória significa que você pode fazer coisas que talvez você não deveria. Dependendo do idioma , o compilador e da plataforma do computador, você pode acidentalmente ( ou intencionalmente ) de memória de acesso que não é seu para acessar . Como resultado, você pode substituir a memória crítica, modificar o código de um aplicativo em execução , ou fazer com que seu aplicativo ou de outro aplicativo se comportar ou sair inesperadamente. Um erro comum é executar após o final de um array, acessando a memória além do fim do espaço alocado para essa matriz.
Gerenciamento de Memória
Gerenciando o uso de memória em um aplicativo usando ponteiros oferece flexibilidade , mas também é uma tarefa árdua. Alocação e desalocação de memória conforme necessário durante o tempo de execução permite criar objetos grandes , como matrizes , de forma rápida e imediatamente liberar a memória quando ele não é mais necessário. No entanto, também é fácil criar vazamentos de memória através da reafectação de um ponteiro , sem liberar a memória que estava apontando para primeiro. A coleta de lixo é de sua responsabilidade.
Parâmetros da Função
Funções podem retornar apenas um valor, mas eles podem ter vários parâmetros. Ao passar em ponteiros para variáveis como parâmetros , uma função pode ser usada para definir os valores dessas variáveis , e os novos valores vão persistir após o retorno da função . Ser capaz de definir o valor de uma série de variáveis de uma vez com uma única chamada de função é limpo e eficiente . No entanto, ele pode ser um pouco confuso para ler, porque você não pode dizer se as variáveis passadas em será modificado ou não simplesmente por olhar para a chamada de função . Você terá que olhar a documentação função para aprender a função se comporta
ponteiros de função
Ponteiros não são apenas para objetos na memória ; . Eles também podem ser usados para as funções , permitindo , assim, uma função a ser passado como um parâmetro para outra função. Um ponteiro de função pode ser atribuído o endereço de uma das opções de funções , de modo que o ponteiro atua como uma espécie de apelido. Linguagens de programação orientada a objetos ter eliminado a necessidade de ponteiros de função com herança e polimorfismo .
Pointer Confusão
Ponteiros são um tema confuso para muitos programadores , principalmente aqueles com experiência em usando linguagens que não possuem ponteiros e acesso direto à memória . No entanto , a persistência leva rapidamente a maestria de ponteiros . Ponteiros são frequentemente acompanhadas de sintaxe obscura. Convenções de nomenclatura de variáveis consistentes podem ajudar o seu código mais legível. Por exemplo, as convenções de nomenclatura comuns incluem o uso de " p_ " ou " ptr_ " como um prefixo para ponteiro nomes de variáveis.
Dicas
Sempre use as funções de alocação fornecidos pelo idioma para alocação de memória , e verifique se a memória foi alocada antes de usá-lo. Tenha cuidado com gerenciamento de memória e liberar memória quando ele não é mais necessário. Se voltar a atribuir um ponteiro para um novo endereço de memória , certifique-se a memória antiga é liberado ou atribuído a um ponteiro diferente. Certifique-se de que os ponteiros criados em funções são atribuídas a propriedade para o alcance dos pais ou de que a memória é desalocado antes de sair da função.