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

C++ Puntero

En este artículo, aprenderá todo sobre los punteros. Aprenderá cómo almacenar valores en la computadora y cómo acceder a ellos utilizando punteros.

Los punteros son C++La característica poderosa, que hace que C++Se distinguen de otros lenguajes de programación (como Java y Python).

Los punteros en C ++Usado en el programa para acceder a la memoria y manipular direcciones.

C ++Dirección

Para entender los punteros, primero debe saber cómo almacenar datos en la computadora.

Cada variable creada en el programa se asigna una ubicación en la memoria del computadora. El valor almacenado por la variable se almacena realmente en la ubicación especificada.

Para saber dónde se almacena los datos, C++Hay un operador & (referencia). El operador & (referencia) proporciona la dirección ocupada por la variable.

Si var es una variable, &var proporciona la dirección de la variable.

Ejemplo1: C ++La dirección en

#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 salida

0x7fff5fbff8ac
0x7fff5fbff8a8
0x7fff5fbff8a4

Nota: Es posible que no obtenga el mismo resultado en su sistema.

El prefijo 0x al principio indica que la dirección está en formato hexadecimal.

Tenga en cuenta que la diferencia entre la primera dirección y la segunda dirección es4bytes, la diferencia entre la segunda dirección y la tercera dirección es4bytes.

Esto se debe a que en64En un sistema de bits, el tamaño de un entero (variable de tipo int) es4bytes.

Variable de puntero

C ++Le permite operar directamente con los datos en la memoria del computadora. Puede asignar y desasignar cualquier espacio en la memoria según sea necesario. Esto se realiza utilizando la variable de puntero (pointer).

Una variable de puntero es una variable que apunta a una dirección específica de otro variable en la memoria.

¿Cómo declarar un puntero?

int *p;
      o
int* p;

La siguiente instrucción define una variable de puntero p. Guarda la dirección de memoria

El asterisco (*) es el operador de desreferencia, lo que significaPuntero al que se refiere.

En este caso, el puntero p es un puntero a int, es decir, apunta al valor entero en la dirección de memoria.

El operador de referencia (&) y el operador de referencia (*)

El operador de referencia (&) mencionado anteriormente proporciona la dirección de la variable.

Para obtener el valor almacenado en la dirección de memoria, usamos el operador de desreferencia (}}*)。

Por ejemplo: Si la variable number se almacena en la dirección de memoria0x123en, y contiene un valor5.

reference(&) operador proporciona un valor0x123, mientras que el operador de desreferencia (*) operador proporciona un valor5.

Nota:Nota: c++Usado en la declaración de punteros (*) el símbolo no es un puntero de referencia. Es solo un símbolo similar para crear punteros.

Ejemplo2: C ++Puntero

C ++El programa muestra el funcionamiento de los punteros.

#include <iostream>
using namespace std;
int main() {
    int *pc, c;
    
    c = 5;
    cout << "Dirección de c (&c): " << &c << endl;
    cout << "Valor de c (c): " << c << endl << endl;
    pc = &c;    // El puntero pc guarda la dirección de memoria de la variable c
    cout << "La dirección del puntero que pc tiene (pc): " << pc << endl;
    cout << "El valor que tiene el puntero de dirección pc (*pc): " << *pc << endl << endl;
    
    c = 11;    // el valor almacenado en la dirección de memoria &c desde5se cambia a11.
    cout << "La dirección que tiene el puntero de dirección pc (pc): " << pc << endl;
    cout << "El contenido que tiene el puntero de dirección pc (*pc): " << *pc << endl << endl;
    *pc = 2; 
    cout << "Dirección de c (&c): " << &c << endl;
    cout << "Valor de c (c): " << c << endl << endl;
    return 0;
}

Resultados de salida

Dirección de c (&c): 0046FD44
Valor de c (c): 5
la dirección del puntero que pc tiene (pc): 0046F
el valor que tiene el puntero de dirección pc (*pc): 5
el puntero de dirección pc tiene (pc): 0046FD4
el contenido que tiene el puntero de dirección pc (*pc):
Dirección de c (&c): 0046FD44
Valor de c (c): 2

Instrucciones de uso del programa

  • cuando c = 5; valor5almacenado en la variable c-0x7fff5fbff8la dirección de c.

  • cuando pc = &c; la dirección del puntero pc es c-0x7fff5fbff8c cuando, el operador de desreferencia (*pc escribe el valor almacenado en esa dirección5.

  • cuando c = 11; ya que el puntero de dirección que pc tiene es el mismo que c - 0x7fff5fbff8lo mismo que c, por lo que al ejecutar la expresión*cambia el valor de pc, también cambia el valor de c, ahora se escribe11.

  • cuando*pc = 2en ese momento; cambia pc - 0x7fff5fbff8el contenido almacenado en la dirección que c almacena. Este desde11se convierte en2. Por lo tanto, cuando escribimos el valor de c, ese valor también es2.

Errores comunes al usar punteros

Supongamos que desea que el puntero pc apunte a la dirección de c. Luego,

int c; *pc;
pc = c;  /* ¡Error! pc es una dirección, mientras que c no es una dirección. */
*pc = &c; /*¡Error!  * pc es el valor al que apunta la dirección, y &c es la dirección.*/
pc = &c; /* ¡Correcto!pc es una dirección, y &c también es una dirección. */
*pc = c; /* ¡Correcto!  * pc es el valor al que apunta la dirección, y c también es un valor. */

En estos dos casos, el puntero pc no apunta a la dirección de c.

También debe ver estos tutoriales relacionados con punteros: