Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Linguagem C

C - Ponteiros


Ponteiros em C são fáceis e divertidos de aprender. Algumas tarefas de programação C são executadas mais facilmente com ponteiros, e outras tarefas, como alocação dinâmica de memória, não podem ser executadas sem o uso de ponteiros. Portanto, torna-se necessário aprender ponteiros para se tornar um programador C perfeito. Vamos começar a aprendê-los em passos simples e fáceis.

Como você sabe, toda variável é um local de memória e todo local de memória tem seu endereço definido que pode ser acessado usando o operador e comercial (&), que denota um endereço na memória. Considere o exemplo a seguir, que imprime o endereço das variáveis ​​definidas −
Demonstração ao vivo
#include <stdio.h>

int main () {

   int  var1;
   char var2[10];

   printf("Address of var1 variable: %x\n", &var1  );
   printf("Address of var2 variable: %x\n", &var2  );

   return 0;
}

Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Address of var1 variable: bff5a400
Address 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, digite é o tipo base do ponteiro; deve ser um tipo de dados C válido e var-name é o nome da variável 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, sejam inteiros, flutuantes, caracteres ou outros, é 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, que faremos com a ajuda de ponteiros com muita frequência. (a) Definimos uma variável de ponteiro, (b) atribuir o endereço de uma variável a um ponteiro e (c) finalmente acessar o valor no endereço disponível na variável ponteiro. Isso é feito usando o operador unário * que retorna o valor da variável localizada no endereço especificado pelo seu operando. O exemplo a seguir faz uso dessas operações -
Demonstração ao vivo
#include <stdio.h>

int main () {

   int  var = 20;   /* actual variable declaration */
   int  *ip;        /* pointer variable declaration */

   ip = &var;  /* store address of var in pointer variable*/

   printf("Address of var variable: %x\n", &var  );

   /* address stored in pointer variable */
   printf("Address stored in ip variable: %x\n", ip );

   /* access the value using the pointer */
   printf("Value of *ip variable: %d\n", *ip );

   return 0;
}

Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Address of var variable: bffd8b3c
Address stored in ip variable: bffd8b3c
Value 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 que é atribuído NULL é chamado de null ponteiro.

O ponteiro NULL é uma constante com valor zero definido em várias bibliotecas padrão. Considere o seguinte programa -
Demonstração ao vivo
#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 contiver o valor nulo (zero), supõe-se que ele aponte para nada.

Para verificar 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


Ponteiros têm muitos conceitos fáceis e são muito importantes para a programação C. Os seguintes conceitos importantes de ponteiro devem ser claros para qualquer programador C -
Nº Sr. Conceito e 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 armazenar vários ponteiros.
3 Ponteiro para ponteiro
C permite que você tenha ponteiro em um ponteiro e assim por diante.
4 Passando ponteiros para funções em C
Passar 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 Retorna o 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.

Linguagem C

  1. Variáveis ​​C, Constantes e Literais
  2. Classe de armazenamento C
  3. Ponteiros C
  4. Relação entre arrays e ponteiros
  5. Endereços e ponteiros de passagem C
  6. Estruturas e ponteiros C
  7. Palavra-chave global do Python
  8. Ponteiros C++ com exemplos
  9. Variável C, Tipos de Dados, Constantes
  10. Ponteiros em C:O que é ponteiro em programação C? Tipos