¿Cuáles son los punteros en C ++?

Apunta la herramienta más poderosa en c ++, ayuda al programador a acceder y manipular la memoria directamente. Por ejemplo, cuando se crea una variable, el trabajo del compilador es hacer una asignación de memoria para almacenar el valor de la variable. Y este valor se recupera utilizando el nombre de variable asignado a los datos. C ++ tiene la compatibilidad para almacenar y recuperar los datos de la memoria en referencia a la dirección de la ubicación de la memoria en la que se almacenan los datos. C ++ incluso realiza punteros en un puntero.

Sintaxis

El formato general de la declaración del puntero es:

Data_type * pointer -variable-name

Tenga en cuenta que la variable del puntero debe ir precedida de un asterisco (*)

Ejemplo: int * xptr;

La variable xptr es un puntero a un entero. En general, las variables de puntero pueden apuntar a variables enteras, variables de caracteres, matrices, archivos, funciones.

¿Por qué necesitamos punteros en C ++?

La asignación de memoria dinámica se simplifica en C ++ mediante punteros, la importancia más destacada de los punteros es que son muy eficientes en el manejo de los diferentes tipos de datos. Aumentan la velocidad de ejecución cuando la función devuelve un valor y también ayudan a acceder a una variable definida fuera de la función. El uso más común incluye la gestión de datos y el acceso a las funciones de los miembros de la clase.

¿Cómo crear punteros en C ++?

Estos son los siguientes pasos para crear punteros en C ++

Paso # 1 - Inicialización de punteros

Es recomendable inicializar las variables de puntero, tan pronto como se declaren. Dado que las variables de puntero almacenan direcciones, pueden direccionar cualquier parte de la memoria.

int *a; // pointer to an integer
double *da; // pointer to a double
float *fa; // pointer to afloat
char *ch // character pointer

Considere el siguiente ejemplo:

int p, * pi; // Esta instrucción le indica al compilador que reserve un espacio para la variable p en la memoria para mantener un valor entero.

pi = & a; // Asigna la dirección de la variable entera p a la variable de puntero. Por ejemplo, si la dirección de p es 4581, entonces el valor en * pi será igual a 4581.

Paso # 2 - Pointer vacío

Aquí, la variable de puntero puede señalar cualquier tipo de datos y este tipo se usa para pasar punteros a funciones que funcionan independientemente del tipo de datos al que se apunta.

Sintaxis: void * variable de puntero;

Ejemplo:

#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )
#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )
#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )
#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )
#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )

Salida:

$ g ++ -o main * .cpp
$ main
el valor señalado por iv es 3
La dirección de x es 0x7ffefbbee6d4
el valor señalado por fv es 45.2
La dirección de f es 0x7ffefbbee6d0
La dirección de x es 0x7ffefbbee6d4

la dirección de f es 0x7ffefbbee6d0

Paso # 3 - Operaciones aritméticas de punteros en C ++

La aritmética del puntero se realiza con matrices. Las siguientes operaciones se pueden realizar en punteros. Son:

  • Incremento (++)
  • Decremento (-)
  • Además de puntero
  • Sustracción del puntero

Cuando agregamos 1 al puntero, especifica que se agrega el tamaño del puntero que apunta.

El siguiente programa especifica la aritmética del puntero que funciona hasta que llega al final de la matriz.

#include
#include
using namespace std;
void pointerarithmetic(int a(), int size)
(
int *e, *t; //Declaring two int pointers variables
e = a; //assigning e to point the arrays initial element a(0) t = a + size; // assigning variable t to the array last element
while(e != t)
(
cout << *e << endl; //displays the e
e++; // incrementing ( next element)
)
)
int main()
(
int a() = (2, 4, 6, 8, 10, 12, 14, 16, 18, 20);
pointerarithmetic (a, 20);
return 0;
)

Salida:

$ g ++ -o main * .cpp
$ main
2

4 4

6 6

8

10

12

14

dieciséis

18 años

20

0 0

0 0

4196480

0 0

-1743362854

32686

1

0 0

153860328

32766

Paso # 4 - Puntero a puntero

flotador ** fpp;

Denota dos niveles de punteros ( Múltiples indirecciones ). Es una variable que apunta a otro puntero más puntos a un objeto especificado en una ubicación de memoria. Por ejemplo, fpp puede ser un puntero flotante que actualmente apunta a la dirección de memoria 2001, el tamaño del flotante es de 8 bytes, luego por

fpp ++;

indica fpp apuntando a la dirección 2009. De manera similar, cuando la variable se disminuye en 1, apuntará a la ubicación anterior de su tipo base en la dirección 1993.

Paso # 5 - Puntero a funciones

Cuando los punteros se pasan a una función como argumentos, los elementos de datos asociados con la variable de estos punteros se alteran dentro de la función y luego se devuelven al programa de llamada, los cambios se conservarán en el programa de llamada. Cuando se pasa un puntero como parámetro, los elementos de datos respectivos se modifican globalmente desde la función llamada. El puntero se pasa por referencia. Las funciones se pueden realizar en punteros de diferentes maneras:

  1. la función invocada al pasar la referencia
  2. La función invocada al pasar un puntero

La función invocada al pasar la referencia

En esto, la dirección se pasa como argumento en lugar de valores.

Ejemplo:

#include
using namespace std;
void changefn(int*, int*);
int main()
(
int n = 5, m = 6;
cout << "Before change" << endl;
cout << "n = " << n << endl;
cout << "m = " << m << endl;
changefn(&n, &m);
cout << "\nAfter change" << endl;
cout << "n = " << n << endl;
cout << "m = " << m << endl;
return 0;
)
void changefn(int* x1, int* x2) (
int s1;
s1 = *x1;
*x1 = *x2;
*x2 = s1;
)

Salida:

$ g ++ -o main * .cpp
$ main
Antes del cambio

n = 5

m = 6

Después del cambio

n = 6

m = 5

Conclusión

Este artículo tenía la intención de actualizar el conocimiento sobre cómo usar punteros en C ++ y sus temas básicos de una manera simple con un ejemplo. El puntero también se conoce como localizador reduce la declaración de código para un mayor rendimiento. Los punteros juegan un papel vital en la implementación de estructuras de datos como la lista vinculada y la programación en el nivel del sistema. Son el lenguaje más preferible en los sistemas integrados, ya que son una buena forma de acceder a la memoria directamente mediante punteros.

Artículos recomendados

Esta es una guía de punteros en C ++. Aquí discutimos cómo crear punteros en C ++ con los ejemplos y resultados dados y por qué lo necesitamos. También puede consultar el siguiente curso de análisis de datos para obtener más información.

  1. Punteros en Python
  2. Tipos de datos en C
  3. Matrices en C ++
  4. Patrones de estrellas en c ++
  5. ¿Cómo funcionan los punteros en C #?