Ponteiros em C são fáceis e divertidos de aprender. Algumas tarefas de programação C são realizadas mais facilmente com ponteiros, e outras tarefas, como alocação de memória dinâmica, não podem ser executadas sem o uso de ponteiros. Portanto, é necessário aprender dicas para se tornar um programador C perfeito. Vamos começar a aprendê-los em etapas simples e fáceis.
Como você sabe, cada variável é um local de memória e cada local de memória tem seu endereço definido, que pode ser acessado usando e comercial (), que denota um endereço na memória. Considere o seguinte exemplo, que imprime o endereço das variáveis definidas –
Quando o código acima é compilado e executado, ele produz o seguinte resultado –
Address of var1 variable: bff5a400Address of var2 variable: bff5a3f6
O que são ponteiros?
Um ponteiro é uma variável cujo valor é o endereço de outra variável, ou seja, endereço direto da localização da memória. Como qualquer variável ou constante, você deve declarar um ponteiro antes de usá-lo para armazenar qualquer endereço de variável. A forma geral de uma declaração de variável de ponteiro é –
type *var-name;
Aqui, o tipo é o tipo de base do ponteiro; deve ser um tipo de dados C válido e var-name é o nome da variável de ponteiro. O asterisco * usado para declarar um ponteiro é o mesmo asterisco usado para multiplicação. No entanto, nesta declaração, o asterisco está sendo usado para designar uma variável como um ponteiro. Dê uma olhada em algumas das declarações de ponteiro válidas –
int *ip; /* pointer to an integer */double *dp; /* pointer to a double */float *fp; /* pointer to a float */char *ch /* pointer to a character */
O tipo de dados real do valor de todos os ponteiros, seja inteiro, flutuante, caractere ou outro , é o mesmo, um número hexadecimal longo que representa um endereço de memória. A única diferença entre ponteiros de diferentes tipos de dados é o tipo de dados da variável ou constante para a qual o ponteiro aponta.
Como usar ponteiros?
Existem algumas operações importantes, o que faremos com a ajuda de ponteiros com muita freqüência. (a) Definimos uma variável de ponteiro, (b) atribuímos o endereço de uma variável a um ponteiro e (c) finalmente acessamos o valor no endereço disponível na variável de ponteiro. Isso é feito usando o operador unário * que retorna o valor da variável localizada no endereço especificado por seu operando. O exemplo a seguir faz uso dessas operações –
Quando o código acima é compilado e executado, ele produz o seguinte resultado –
Address of var variable: bffd8b3cAddress stored in ip variable: bffd8b3cValue of *ip variable: 20
Ponteiros NULL
É sempre uma boa prática atribuir um valor NULL a uma variável de ponteiro caso você não tenha um endereço exato a ser atribuído. Isso é feito no momento da declaração da variável. Um ponteiro ao qual é atribuído NULL é chamado de ponteiro nulo.
O ponteiro NULL é uma constante com valor zero definido em várias bibliotecas padrão. Considere o seguinte programa –
#include <stdio.h>int main () { int *ptr = NULL; printf("The value of ptr is : %x\n", ptr ); return 0;}
Quando o código acima é compilado e executado, ele produz o seguinte resultado –
The value of ptr is 0
Na maioria dos sistemas operacionais, os programas não têm permissão para acessar a memória no endereço 0 porque essa memória é reservada pelo sistema operacional. No entanto, o endereço de memória 0 tem um significado especial; ele sinaliza que o ponteiro não se destina a apontar para um local de memória acessível. Mas, por convenção, se um ponteiro contém o valor nulo (zero), ele não aponta para nada.
Para verificar se há um ponteiro nulo, você pode usar uma instrução “if” da seguinte maneira –
if(ptr) /* succeeds if p is not null */if(!ptr) /* succeeds if p is null */
Ponteiros em detalhes
Os ponteiros têm muitos conceitos fáceis e são muito importantes para a programação C. Os seguintes conceitos de ponteiro importantes devem ser claros para qualquer programador C –
Sr.No. | Conceito & Descrição |
---|---|
1 | Aritmética de ponteiro
Existem quatro operadores aritméticos que podem ser usados em ponteiros: ++, -, +, – |
2 | Matriz de ponteiros
Você pode definir matrizes para conter uma série de ponteiros. |
3 | Ponteiro para ponteiro
C permite que você tenha um ponteiro sobre um ponteiro e assim por diante. |
4 | Passando ponteiros para funções em C
Passando um argumento por referência ou por endereço permite que o argumento passado seja alterado na função de chamada pela função chamada. |
5 | Retornar ponteiro de funções em C
C permite que uma função retorne um ponteiro para a variável local, variável estática e memória alocada dinamicamente também. |