Conceitos básicos de ponteiros em programação C
Memorizar esta frase: Um ponteiro é uma variável que contém uma localização de memória. Você deve aceitar a insanidade do ponteiro antes de prosseguir. Verdade, embora você pode obter no local de memória de uma variável, ou endereço, usando o operador, o ponteiro é uma besta muito mais poderoso.
Um ponteiro é um tipo de variável. Como outras variáveis, deve ser declarado no código. Além disso, ele deve ser inicializado antes de ser usado. Essa última parte é muito importante, mas primeiro a declaração tem o seguinte formato:
Tipo * nome-
Como quando você declarar qualquer variável, a digitar identifica o ponteiro como um char, int, float, e assim por diante. o nome é o nome da variável de ponteiro, que deve ser único, assim como qualquer outro nome de variável. O asterisco identifica a variável como um ponteiro, não como uma variável regular.
A linha a seguir declara um ponteiro char, sócio:
char * sidekick-
E esta linha cria um ponteiro de casal:
duplo arco-íris-
Para inicializar um ponteiro, você deve definir o seu valor, assim como qualquer outra variável. A grande diferença é que um ponteiro é inicializado para o local de memória. Essa localização não é um local na memória aleatória, mas sim o endereço de outra variável dentro do programa. Por exemplo:
sidekick = conduzir-
A instrução anterior inicializa o sócio variável para o endereço do conduzir variável. Ambas as variáveis são tipos-de char se não, o compilador rosnava como um gato molhado. Depois que a declaração é executado, o sócio ponteiro contém o endereço do conduzir variável.
Se você está lendo este texto e apenas balançando a cabeça sem entender nada, que bom! Isso significa que é hora de um exemplo.
O código-fonte num exemplo inclui comentários para ajudar a descrever duas linhas cruciais. O programa realmente não faz outra coisa senão provar que o ponteiro sócio contém o endereço ou localização de memória, de variável conduzir.
UM EXEMPLO
#include int main () {lead-char char * ajudante-lead = 'A'- / * inicializar variável char * / sidekick = chumbo / * inicializar ponteiro IMPORTANTE! * / Printf ( "Sobre variável 'lead':n")-printf("Sizett%ldn",sizeof(lead))-printf("Contentst%cn",lead)-printf("Locationt%pn",lead)-printf("And variável 'sidekick': n ") - printf (" Conteúdo t% p n ", sidekick) -Retornar (0) -}
Outras coisas a nota: Linha 12 usa duas sequências guia de escape para alinhar a saída. Além disso, não se esqueça do na Linha 14, que vai buscar o endereço da variável.
Exercício 1: Digite o código-fonte de um exemplo em seu editor. Construir e executar.
Aqui está a saída:
Sobre "principal" variável: Tamanho 1Contents alocação 0x7fff5fbff8ffAnd variável 'sidekick': Índice 0x7fff5fbff8ff
Os endereços (no exemplo) são únicos para cada sistema, mas a principal coisa a notar é que o conteúdo do ponteiro sócio são iguais ao local de memória da variável conduzir. Isso é por causa da atribuição, ou inicialização, que tem lugar na linha 9 no código.
Seria inútil para um ponteiro para apenas conter um endereço de memória. O ponteiro também pode espreitar para esse endereço e determinar o valor que está armazenado lá. Para que isso aconteça, o operador * é prefixado para nome da variável do ponteiro.
Exercício 2: Modificar seu código-fonte do Exercício 1, adicionando a seguinte declaração após Linha 16:
printf ( "valor Peek t% c n", * sidekick) -
Construir e executar. Aqui está a saída:
Sobre "principal" variável: Tamanho 1Contents alocação 0x7fff5fbff8ffAnd variável 'sidekick': Índice 0x7fff5fbff8ffPeek o valor de uma
Quando você especificar o * (asterisco) antes do nome de uma variável de ponteiro inicializado, os resultados são o conteúdo do endereço. O valor é interpretado com base no tipo de ponteiro. Neste exemplo, * sidekick representa o valor de char armazenado numa localização de memória mantidos no sócio variável, o qual é realmente o mesmo que o local de memória variável conduzir.
Para colocar de outra forma:
Uma variável ponteiro contém um local de memória.
o * ponteiro espreita variável para o valor armazenado no local de memória.