Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Lenguaje C

Punteros de C++

Puntero de C++

En este tutorial, aprenderemos sobre punteros en C++ y su funcionamiento con la ayuda de ejemplos.

En C++, los punteros son variables que almacenan las direcciones de memoria de otras variables.

Dirección en C++

Si tenemos una variable var en nuestro programa, &var nos dará su dirección en la memoria. Por ejemplo,

Ejemplo 1:Impresión de direcciones variables en C++

#include <iostream>
using namespace std;

int main()
{
    // declare variables
    int var1 = 3;
    int var2 = 24;
    int var3 = 17;

    // print address of var1
    cout << "Address of var1: "<< &var1 << endl;

    // print address of var2
    cout << "Address of var2: " << &var2 << endl;

    // print address of var3
    cout << "Address of var3: " << &var3 << endl;
}

Salida

Address of var1: 0x7fff5fbff8ac
Address of var2: 0x7fff5fbff8a8
Address of var3: 0x7fff5fbff8a4

Aquí, 0x al principio representa que la dirección está en forma hexadecimal.

Observe que la primera dirección difiere de la segunda en 4 bytes y la segunda dirección difiere de la tercera en 4 bytes.

Esto se debe a que el tamaño de un int la variable es de 4 bytes en un sistema de 64 bits.

Nota: Es posible que no obtenga los mismos resultados cuando ejecute el programa.


Puntero C++

Como se mencionó anteriormente, los punteros se utilizan para almacenar direcciones en lugar de valores.

Así es como podemos declarar punteros.

int *pointVar;

Aquí, hemos declarado un puntero pointVar del int tipo.

También podemos declarar punteros de la siguiente manera.

int* pointVar; // preferred syntax

Tomemos otro ejemplo de declaración de punteros.

int* pointVar, p;

Aquí, hemos declarado un puntero pointVar y una variable normal p .

Nota: El * El operador se usa después del tipo de datos para declarar punteros.


Asignación de direcciones a punteros

Así es como podemos asignar direcciones a punteros:

int* pointVar, var;
var = 5;

// assign address of var to pointVar pointer
pointVar = &var;

Aquí, 5 se asigna a la variable var . Y, la dirección de var se asigna a la pointVar puntero con el código pointVar = &var .


Obtener el valor de la dirección usando punteros

Para obtener el valor apuntado por un puntero, usamos el * operador. Por ejemplo:

int* pointVar, var;
var = 5;

// assign address of var to pointVar
pointVar = &var;

// access value pointed by pointVar
cout << *pointVar << endl;   // Output: 5

En el código anterior, la dirección de var se asigna a pointVar . Hemos utilizado el *pointVar para obtener el valor almacenado en esa dirección.

Cuando * se usa con punteros, se llama el operador de desreferencia . Opera sobre un puntero y da el valor apuntado por la dirección almacenada en el puntero. Es decir, *pointVar = var .

Nota:en C++, pointVar y *pointVar es completamente diferente No podemos hacer algo como *pointVar = &var;


Ejemplo 2:Funcionamiento de punteros de C++

#include <iostream>
using namespace std;
int main() {
    int var = 5;

    // declare pointer variable
    int* pointVar;

    // store address of var
    pointVar = &var;

    // print value of var
    cout << "var = " << var << endl;

    // print address of var
    cout << "Address of var (&var) = " << &var << endl
         << endl;

    // print pointer pointVar
    cout << "pointVar = " << pointVar << endl;

    // print the content of the address pointVar points to
    cout << "Content of the address pointed to by pointVar (*pointVar) = " << *pointVar << endl;
    
    return 0;
}

Salida

var = 5
Address of var (&var) = 0x61ff08

pointVar = 0x61ff08
Content of the address pointed to by pointVar (*pointVar) = 5

Cambio de valor señalado por punteros

Si pointVar apunta a la dirección de var , podemos cambiar el valor de var usando *pointVar .

Por ejemplo,

int var = 5;
int* pointVar;

// assign address of var
pointVar = &var;

// change value at address pointVar
*pointVar = 1;

cout << var << endl; // Output: 1

Aquí, pointVar y &var tienen la misma dirección, el valor de var también se cambiará cuando *pointVar se cambia.


Ejemplo 3:Cambio de valor apuntado por punteros

#include <iostream>
using namespace std;
int main() {
    int var = 5;
    int* pointVar;

    // store address of var
    pointVar = &var;

    // print var
    cout << "var = " << var << endl;

    // print *pointVar
    cout << "*pointVar = " << *pointVar << endl
         << endl;

    cout << "Changing value of var to 7:" << endl;

    // change value of var to 7
    var = 7;

    // print var
    cout << "var = " << var << endl;

    // print *pointVar
    cout << "*pointVar = " << *pointVar << endl
         << endl;

    cout << "Changing value of *pointVar to 16:" << endl;

    // change value of var to 16
    *pointVar = 16;

    // print var
    cout << "var = " << var << endl;

    // print *pointVar
    cout << "*pointVar = " << *pointVar << endl;
    return 0;
}

Salida

var = 5
*pointVar = 5

Changing value of var to 7:
var = 7
*pointVar = 7

Changing value of *pointVar to 16:
var = 16
*pointVar = 16

Errores comunes al trabajar con punteros

Supongamos que queremos un puntero varPoint para apuntar a la dirección de var . Entonces,

int var, *varPoint;

// Wrong! 
// varPoint is an address but var is not
varPoint = var;

// Wrong!
// &var is an address
// *varPoint is the value stored in &var
*varPoint = &var;

// Correct! 
// varPoint is an address and so is &var
varPoint = &var;

 // Correct!
// both *varPoint and var are values
*varPoint = var;

Lecturas recomendadas :


Lenguaje C

  1. Tipos de datos de C++
  2. Operadores de C++
  3. Comentarios de C++
  4. Plantillas de clase de C++
  5. Punteros C
  6. Punteros de C++ con ejemplos
  7. C - Punteros
  8. Descripción general de C++
  9. Constantes/Literales de C++
  10. Operadores en C++
  11. Números en C++