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.

menu