Quais são os ponteiros em C ++?

Ponteiros, a ferramenta mais poderosa em c ++, ajuda o programador a acessar e manipular a memória diretamente. Por exemplo, quando uma variável é criada, o trabalho do compilador é fazer a alocação de memória para armazenar o valor da variável. E esse valor é recuperado usando o nome da variável atribuído aos dados. O C ++ tem compatibilidade para armazenar e recuperar os dados da memória, referindo-se ao endereço do local da memória em que os dados são armazenados. C ++ até executa ponteiros em um ponteiro.

Sintaxe

O formato geral da declaração do ponteiro é:

Data_type * pointer -variable-name

Observe que a variável ponteiro deve ser precedida por um asterisco (*)

Exemplo: int * xptr;

A variável xptr é um ponteiro para um número inteiro. Em geral, as variáveis ​​de ponteiro podem apontar para variáveis ​​inteiras, variáveis ​​de caracteres, matrizes, arquivos, funções.

Por que precisamos de ponteiros em C ++?

A alocação dinâmica de memória é simplificada em C ++ usando ponteiros, a importância mais importante dos ponteiros é que eles são muito eficientes no manuseio dos diferentes tipos de dados. Eles aumentam a velocidade de execução quando a função retorna um valor e também permitem acessar uma variável definida fora da função. O uso mais comum inclui gerenciamento de dados e acesso às funções de membro da classe.

Como criar ponteiros em C ++?

Aqui estão as etapas a seguir para criar ponteiros em C ++

Etapa 1 - Inicialização dos ponteiros

É aconselhável inicializar variáveis ​​de ponteiro, assim que elas forem declaradas. Como as variáveis ​​de ponteiro armazenam endereços, elas podem endereçar qualquer parte da memória.

int *a; // pointer to an integer
double *da; // pointer to a double
float *fa; // pointer to afloat
char *ch // character pointer

Considere o seguinte exemplo:

int p, * pi; // Esta instrução instrui o compilador a reservar um espaço para a variável p na memória manter um valor inteiro.

pi = & a; // Atribui o endereço da variável inteira p à variável de ponteiro. Por exemplo, se o endereço de p for 4581, o valor no * pi será igual a 4581.

Etapa 2 - Ponteiro vazio

Aqui, a variável ponteiro pode apontar qualquer tipo de dados e esse tipo é usado na passagem de ponteiros para funções que funcionam independentemente do tipo de dado apontado.

Sintaxe: variável void * ponteiro;

Exemplo:

#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )
#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )
#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )
#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )
#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )

Resultado:

$ g ++ -o main * .cpp
$ main
o valor apontado por iv é 3
O endereço de x é 0x7ffefbbee6d4
o valor apontado por fv é 45, 2
O endereço de f é 0x7ffefbbee6d0
O endereço de x é 0x7ffefbbee6d4

o endereço de f é 0x7ffefbbee6d0

Etapa 3 - Operações aritméticas de ponteiros em C ++

A aritmética do ponteiro é realizada com matrizes. As seguintes operações podem ser executadas em ponteiros. Eles são:

  • Incremento (++)
  • Decremento (-)
  • Adição de ponteiro
  • Subtração de ponteiro

Quando adicionamos 1 ao ponteiro, ele especifica a adição do tamanho do ponteiro apontando para.

O programa abaixo especifica a aritmética do ponteiro que funciona até chegar ao final da matriz.

#include
#include
using namespace std;
void pointerarithmetic(int a(), int size)
(
int *e, *t; //Declaring two int pointers variables
e = a; //assigning e to point the arrays initial element a(0) t = a + size; // assigning variable t to the array last element
while(e != t)
(
cout << *e << endl; //displays the e
e++; // incrementing ( next element)
)
)
int main()
(
int a() = (2, 4, 6, 8, 10, 12, 14, 16, 18, 20);
pointerarithmetic (a, 20);
return 0;
)

Resultado:

$ g ++ -o main * .cpp
$ main
2

4

6

8

10

12

14

16

18

20

0 0

0 0

4196480

0 0

-1743362854

32686

1

0 0

153860328

32766

Etapa 4 - Ponteiro para ponteiro

float ** fpp;

Denota dois níveis de ponteiros ( Indiretos múltiplos ). É uma variável que aponta para outro ponteiro e aponta para um objeto especificado em um local de memória. Por exemplo, fpp seja um ponteiro flutuante apontando atualmente para o endereço de memória 2001, o tamanho do flutuador é 8 bytes e, em seguida, por

fpp ++;

indica fpp apontando para o endereço 2009. Da mesma forma, quando a variável é decrementada por 1, ela aponta para o local anterior do seu tipo de base no endereço 1993.

Etapa 5 - Ponteiro para funções

Quando os ponteiros são passados ​​para uma função como argumentos, os itens de dados associados à variável desses ponteiros são alterados na função e retornados ao programa de chamada, as alterações serão retidas no programa de chamada. Quando um ponteiro é passado como parâmetro, os respectivos itens de dados são alterados globalmente de dentro da função chamada. O ponteiro é passado por referência. As funções podem ser executadas em ponteiros de diferentes maneiras:

  1. a função invocada passando a referência
  2. A função chamada passando um ponteiro

A função chamada passando a referência

Neste, o endereço é passado como um argumento em vez de valores.

Exemplo:

#include
using namespace std;
void changefn(int*, int*);
int main()
(
int n = 5, m = 6;
cout << "Before change" << endl;
cout << "n = " << n << endl;
cout << "m = " << m << endl;
changefn(&n, &m);
cout << "\nAfter change" << endl;
cout << "n = " << n << endl;
cout << "m = " << m << endl;
return 0;
)
void changefn(int* x1, int* x2) (
int s1;
s1 = *x1;
*x1 = *x2;
*x2 = s1;
)

Resultado:

$ g ++ -o main * .cpp
$ main
Antes da mudança

n = 5

m = 6

Depois da mudança

n = 6

m = 5

Conclusão

Este artigo pretendeu atualizar o conhecimento sobre como usar ponteiros em C ++ e seus tópicos básicos de uma maneira simples com um exemplo. O ponteiro também é conhecido como localizador reduz a instrução de código para obter um desempenho superior. Os ponteiros desempenham um papel vital na implementação de estruturas de dados como lista vinculada e programação no nível do sistema. Eles são a linguagem mais preferível em sistemas embarcados, pois são uma boa maneira de acessar a memória diretamente usando ponteiros.

Artigos recomendados

Este é um guia para ponteiros em C ++. Aqui discutimos como criar ponteiros em C ++ com os exemplos e a saída fornecidos e por que precisamos disso. Você também pode consultar o seguinte curso de análise de dados para saber mais

  1. Ponteiros em Python
  2. Tipos de dados em C
  3. Matrizes em C ++
  4. Padrões de estrelas em c ++
  5. Como os ponteiros funcionam em c #?