English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C++ Ponteiro

Neste artigo, você aprenderá tudo sobre ponteiros. Você aprenderá como armazenar valores no computador e como acessá-los usando ponteiros.

O ponteiro é o C++A poderosa característica do C++Diferenciam-se de outros idiomas de programação (como Java e Python).

Os ponteiros em C ++Usado no programa para acessar a memória e manipular endereços.

C ++Endereço

Para entender o ponteiro, você deve primeiro saber como armazenar dados no computador.

Cada variável criada no programa aloca um local na memória do computador. O valor armazenado na variável é realmente armazenado no local especificado.

Para saber onde os dados são armazenados, C++Há um operador & (referência). O operador & (reference) fornece o endereço ocupado pela variável.

Se var for uma variável, &var fornece o endereço dessa variável.

Exemplo1:C ++no endereço

#include <iostream>
using namespace std;
int main()
{
    int var1 = 3;
    int var2 = 24;
    int var3 = 17;
    cout << &var1 << endl;
    cout << &var2 << endl;
    cout << &var3 << endl;
}

Resultados de saída

0x7fff5fbff8ac
0x7fff5fbff8a8
0x7fff5fbff8a4

Atenção: Pode não obter o mesmo resultado no seu sistema.

O 0x no início indica que o endereço está no formato hexadecimal.

Observe que o endereço um difere do endereço dois4bytes, o endereço dois difere do endereço três4bytes.

Isso porque em64No sistema de bits, o tamanho do inteiro (variável do tipo int) é4bytes.

Variável de ponteiro

C ++Permite que você manipule diretamente os dados na memória do computador. Você pode alocar e desalocar qualquer espaço na memória conforme necessário. Isso é feito usando a variável de ponteiro (pointer).

A variável de ponteiro é uma variável que aponta para um endereço específico de outra variável na memória.

Como declarar um ponteiro?

int *p;
      ou
int* p;

A instrução acima define uma variável de ponteiro p. Ele armazena o endereço da memória

O asterisco (*) é o operador de desreferência, que representaO ponteiro apontado

Aqui, o ponteiro p é um ponteiro para int, ou seja, ele aponta para o valor inteiro na memória de endereço.

O operador de referência (&) e o operador de referência (*)

O operador de referência (&) mencionado acima fornece o endereço da variável.

Para obter o valor armazenado no endereço de memória, usamos o operador de desreferência (*)。

Por exemploSe a variável number estiver armazenada no endereço de memória0x123contém um valor5

reference(&) operador fornece um valor0x123e o operador de referência (*) operador fornece um valor5

Atenção:Atenção: c++Operador usado na declaração do ponteiro*) símbolo não é um ponteiro de referência. É apenas um símbolo semelhante para criar um ponteiro.

Exemplo2:C ++Ponteiro

C ++O programa demonstra o funcionamento dos ponteiros.

#include <iostream>
using namespace std;
int main() {
    int *pc, c;
    
    c = 5;
    cout << "Endereço de c (&c): " << &c << endl;
    cout << "Valor de c (c): " << c << endl << endl;
    pc = &c;    // o ponteiro pc armazena o endereço de memória da variável c
    cout << "O endereço do ponteiro que pc possui (pc): "<< pc << endl;
    cout << "O valor que o ponteiro de endereço pc possui(*pc): " << *pc << endl << endl;
    
    c = 11;    // o valor armazenado no endereço de memória &c de5mudado para11。
    cout << "O endereço que o ponteiro de endereço pc possui (pc): " << pc << endl;
    cout << "O conteúdo que o ponteiro de endereço pc possui(*pc): " << *pc << endl << endl;
    *pc = 2; 
    cout << "Endereço de c (&c): " << &c << endl;
    cout << "Valor de c (c): " << c << endl << endl;
    return 0;
}

Resultados de saída

Endereço de c (&c): 0046FD44
Valor de c (c): 5
o endereço de ponteiro que pc possui (pc): 0046F
o valor que o ponteiro de endereço pc possui(*pc): 5
o ponteiro de endereço pc possui (pc): 0046FD4
o conteúdo que o ponteiro de endereço pc possui(*pc):
Endereço de c (&c): 0046FD44
Valor de c (c): 2

Instrução de uso do programa

  • Quando c = 5; valor5armazenado na variável c-0x7fff5fbff8o endereço armazenado no c

  • Quando pc = &c; o endereço do ponteiro pc é c-0x7fff5fbff8ao usar o operador de desreferência (*o valor armazenado naquele endereço5。

  • Quando c = 11; Como o endereço apontado pelo ponteiro pc e c - 0x7fff5fbff8o mesmo que c, então ao executar a expressão*ao mudar o pc, o valor de c também muda, e agora é output11。

  • Quando*pc = 2no momento; ele mudou o pc - 0x7fff5fbff8o conteúdo armazenado no endereço que c armazena. Esse valor de11mudou para2Portanto, quando输出的c tem esse valor, esse valor também é2。

Erros comuns ao usar ponteiros

Suponha que você deseje que o ponteiro pc aponte para o endereço de c. Então,

int c; *pc;
pc = c;  /* Erro!  pc é um endereço, enquanto c não é um endereço. */
*pc = &c; /*Errado!  * pc é o valor apontado pelo endereço e &c é o endereço.*/
pc = &c; /* Correto!   pc é um endereço e &c também é um endereço. */
*pc = c; /* Correto!  * pc é o valor apontado pelo endereço e c também é um valor. */

Nesses dois casos, o ponteiro pc não aponta para o endereço de c.

Você também deve ver esses tutoriais relacionados a ponteiros: