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:
- a função invocada passando a referência
- 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
- Ponteiros em Python
- Tipos de dados em C
- Matrizes em C ++
- Padrões de estrelas em c ++
- Como os ponteiros funcionam em c #?