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

Dominando Ponteiros em C++: Conceitos, Exemplos e Aplicações Práticas

O que São Ponteiros?

Um ponteiro em C++ é uma variável que armazena o endereço de memória de outra variável. O tipo do ponteiro deve corresponder ao tipo do dado para o qual ele aponta. Por exemplo, um int* só pode conter endereços de objetos int.

Ponteiros permitem que um programa manipule dados diretamente na memória, permitindo estruturas de dados eficientes, alocação dinâmica e semântica de passagem por referência.

Entendendo Endereços de Memória

Toda variável é alocada em um local único na RAM. O operador de referência & recupera esse endereço. Para uma variável x, &x resulta em sua localização de memória.

Sintaxe de Declaração de Ponteiro

Declarações seguem o padrão:

tipo_dado *nome_ponteiro;

Exemplos:

int *p;      // ponteiro para int
double *d;   // ponteiro para double
char *c;     // ponteiro para char

Referência (&) vs. Desreferência (*)

O operador & fornece o endereço de uma variável; o operador * recupera o valor armazenado naquele endereço.

#include <iostream>
using namespace std;
int main() {
    int x = 27;
    int *ip = &x;
    cout << "Valor de x: " << x << endl;
    cout << "Endereço de x: " << ip << endl;
    cout << "Valor via ponteiro: " << *ip << endl;
    return 0;
}

Saída:

Valor de x: 27
Endereço de x: 0x7ffeefbff5ac
Valor via ponteiro: 27

Ponteiros e Arrays

Nomes de arrays decaem para ponteiros para seu primeiro elemento. Portanto:

int arr[5];
int *p = arr;      // correto
int *q = &arr;     // incorreto – &arr resulta no endereço do array inteiro, não do primeiro elemento

Usando um ponteiro para iterar sobre um array:

#include <iostream>
using namespace std;
int main() {
    int *p;
    int arr[] = {10, 34, 13, 76, 5, 46};
    p = arr;
    for (int i = 0; i < 6; ++i) {
        cout << *p++ << endl;
    }
    return 0;
}

Saída:

10
34
13
76
5
46

Ponteiros Nulos

Quando um ponteiro não tem alvo válido, deve ser inicializado para NULL (ou nullptr em C++11 e posterior). Isso previne desreferência acidental.

#include <iostream>
using namespace std;
int main() {
    int *ip = nullptr;
    cout << "ip = " << ip << endl; // imprime 0
    return 0;
}

Usando Ponteiros em Funções

Passar um ponteiro para uma função permite que a função modifique a variável original. Esta técnica implementa passagem por referência.

#include <iostream>
using namespace std;
void modificar(int *p1, int *p2) {
    *p1 = 10;
    *p2 = 11;
}
int main() {
    int a = 5, b = 5;
    cout << "Antes: a=" << a << ", b=" << b << endl;
    modificar(&a, &b);
    cout << "Depois: a=" << a << ", b=" << b << endl;
    return 0;
}

Saída:

Antes: a=5, b=5
Depois: a=10, b=11

Benefícios dos Ponteiros

Resumo Rápido

Linguagem C

  1. Arrays em C++ Desmistificados: Declaração, Inicialização e Técnicas com Ponteiros
  2. Laço do-while em C++: Sintaxe, Exemplos Práticos e Loops Aninhados
  3. Dominando Ponteiros em C++: Conceitos, Exemplos e Aplicações Práticas
  4. Dominando o Tipo Char em C++: Declaração, ASCII e Técnicas de Conversão
  5. Sobrecarga de Operadores em C++: Guia Prático com Exemplos de Código
  6. Structs em C++ Explicadas com Exemplo Prático
  7. Dominando std::list em C++: Sintaxe, Funções e Exemplos Práticos
  8. Funções em C++ Explicadas com Exemplos Práticos de Código
  9. Dominando Collections em C#: Tutorial Prático com Exemplos do Mundo Real
  10. Ponteiros em C: Guia Completo sobre Tipos, Uso e Melhores Práticas