fbpixel
Etiquetas: ,
0
(0)

,

O ponteiro na linguagem C é uma ferramenta muito poderosa para realizar determinadas tarefas. É um conceito que precisa de compreender se quiser melhorar as suas competências em C. Alguns algoritmos serão mais complicados ou mesmo impossíveis de escrever sem o uso de ponteiros.

Introdução

Num programa, qualquer elemento definido (variáveis, objectos, funções, etc.) é armazenado na memória num endereço específico. Para encontrar esse elemento, basta saber o endereço de memória utilizado pelo elemento, ou o primeiro endereço utilizado se a variável ocupar várias áreas de memória.

Um ponteiro é uma variável que contém o endereço de memória de outra variável (ou objeto). Embora o valor de um ponteiro seja sempre um número inteiro, o seu tipo depende do objeto para o qual aponta.

Declarar um ponteiro

O tipo do ponteiro deve ser idêntico ao tipo da variável a que se dirige.

<type> * <pointer_name> //ou <type> *<pointer_name>

Ex:

float myfloat
float * myfloataddress;
int myint
int * myintaddress;

Podemos, portanto, inicializar a variável e o seu endereço na mesma linha

int i,*pi;

Operação sobre ponteiros

O endereço de uma variável é um número inteiro. Por conseguinte, é possível adicionar e subtrair um número inteiro a um endereço para obter um ponteiro do mesmo tipo para um endereço diferente.

ptr+i –> endereço contido em ptr + i * ptr tipo tamanho

Também pode subtrair dois endereços que apontam para o mesmo tipo. A subtração é útil, por exemplo, quando os dois ponteiros apontam para a mesma matriz para descobrir o número de elementos entre os dois elementos apontados.

ptr1-ptr2 –> (endereço apontado por ptr1 – endereço apontado por ptr2)/(ptr1 e ptr2 tipo tamanho)

Também é possível comparar valores de endereço usando o <,>,<=,>=,!= e ==

Modificar o valor de uma variável utilizando um ponteiro

No exemplo seguinte, x é uma variável inteira e p é um ponteiro inteiro que contém o endereço da variável x. O valor de x, inicializado em 3, é alterado para 21 utilizando o ponteiro.

int x=3;
int * p=&amp;amp;x;

*p=21; // is equivalent to x=21;
printf("valeur de *p = %d\n",*p); // equivalent to printf("valeur de x = %d\n",x);

Modificar uma variável na entrada de uma função

Em C, uma função só pode devolver uma única variável. Para devolver vários valores, é possível utilizar os ponteiros destas variáveis de entrada em vez de devolver os próprios valores.

#include <iostream>
int myparam=5;
struct mystruct_T{
  int val1;
  int val2;
}STRUCT;

void change_struct( mystruct_T * mystruct, int * param) {
   mystruct-&gt;val1=10;
   *param=26;
}

int main(){
    change_struct(&amp;STRUCT, &amp;myparam);
    
    printf("Struct.val1 : %d",STRUCT.val1);
    printf("param : %d",myparam);
}

Com este método, é possível modificar várias variáveis como se a função estivesse a devolver vários valores.

Breve resumo

  • Um ponteiro é uma variável que contém o endereço de outra variável
  • Para aceder ao endereço da variável var, utilize o operador de endereço (&): &var
  • Para obter o valor da variável a partir do endereço, utilize o operador de indirecção unário(*) : *pointer
  • Quando é utilizado um ponteiro de estrutura, o operador -> é utilizado para aceder ao membro da estrutura: mystruct->elm1
  • É possível apontar para funções

Fontes

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?