English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
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.
#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.
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.
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 (&) 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.
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。
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: