Ponteiros C

Os ponteiros são recursos poderosos da programação C e C ++. Antes de aprendermos os ponteiros, vamos aprender sobre endereços em programação C.

Endereço em C

Se você tiver uma variável var em seu programa, &var fornecerá seu endereço na memória.

Nós usamos o endereço várias vezes enquanto usamos a função scanf().

Aqui, o valor inserido pelo usuário é armazenado no endereço da variável var. Vejamos um exemplo prático.

Saída

var: 5 address of var: 2686778

Observação: você provavelmente obterá um endereço diferente ao executar o código acima.

C Ponteiros

Ponteiros (variáveis de ponteiro) são variáveis especiais usadas para armazenar endereços em vez de valores.

Sintaxe de ponteiro

Aqui está como podemos declarar ponteiros.

Aqui, declaramos um ponteiro p do tipo int.

Você também pode declarar ponteiros dessas maneiras.

Vejamos outro exemplo de declaração de ponteiros.

Aqui, declaramos um ponteiro p1 e uma variável normal p2.

Atribuição de endereços a ponteiros

Vejamos um exemplo.

Aqui, 5 é atribuído à variável c. E, o endereço de c é atribuído ao ponteiro pc.

Obter valor da coisa apontada por ponteiros

Para obter o valor da coisa apontada pelos ponteiros, usamos o * operador. Por exemplo:

Aqui, o endereço de c é atribuído ao ponteiro do pc. Para obter o valor armazenado nesse endereço, usamos * pc.

Nota: No exemplo acima, pc é um ponteiro, não *pc. Você não pode e não deve fazer algo como *pc = &c;

A propósito, * é chamado de operador de desreferência ( ao trabalhar com ponteiros). Ele opera em um ponteiro e fornece o valor armazenado nesse ponteiro.

Alterando o valor apontado por ponteiros

Vejamos um exemplo.

Atribuímos o endereço de c ao ponteiro de pc.

Em seguida, alteramos o valor de c para 1. Como pc e o endereço de c é o mesmo, *pc nos dá 1.

Vejamos outro exemplo.

Atribuímos o endereço de c ao ponteiro do pc.

Em seguida, alteramos *pc para 1 usando *pc = 1;. Como pc e o endereço de c são iguais, c será igual a 1.

Vejamos mais um exemplo.

Inicialmente, o endereço de c é atribuído ao ponteiro do pc usando pc = &c;. Como c é 5, *pc nos dá 5.

Então, o endereço de d é atribuído ao ponteiro do pc usando pc = &d;. Como d é -15, *pc nos dá -15 .

Exemplo: Trabalho de ponteiros

Vejamos um exemplo prático.

Resultado

Address of c: 2686784Value of c: 22Address of pointer pc: 2686784Content of pointer pc: 22Address of pointer pc: 2686784Content of pointer pc: 11Address of c: 2686784Value of c: 2

Explicação do programa

  1. int* pc, c;

    Aqui , um ponteiro pc e uma variável normal c, ambos do tipo int, são criados.
    Como pc e c não são inicializados inicialmente, o ponteiro pc aponta para nenhum endereço ou um endereço aleatório. E a variável c tem um endereço, mas contém um valor de lixo aleatório.
  2. c = 22;

    Isso atribui 22 à variável c. Ou seja, 22 é armazenado na localização da memória da variável c.
  3. pc = &c;

    Isso atribui o endereço da variável c ao ponteiro pc.
  4. c = 11;

    Isso atribui 11 à variável c.
  5. *pc = 2;

    Isso altera o valor no local da memória apontado pelo ponteiro pc para 2.

Erros comuns ao trabalhar com ponteiros

Suponha que você queira que o ponteiro pc aponte para o endereço de c. Então,

Aqui está um exemplo de sintaxe de ponteiro que os iniciantes costumam achar confusa.

Por que não recebemos um erro quando usando int *p = &c;?

É porque

é equivalente a

Em ambos os casos, estamos criando um ponteiro p (não *p) e atribuindo &c a ele.

Para evitar essa confusão, podemos usar a instrução como esta:

Agora que você sabe o que são os ponteiros, aprenderá como ponteiros estão relacionados a matrizes no próximo tutorial.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *