¿Cuántos niveles de punteros podemos tener en C/C++?

Requisito previo: Puntero en C y C++ , Puntero doble (Puntero a puntero) en C
Un puntero se utiliza para apuntar a una ubicación de memoria de una variable. Un puntero almacena la dirección de una variable y se puede acceder al valor de una variable eliminando la referencia del puntero. 
Un puntero generalmente se inicializa como: 
 

datatype *variable name;

Esta declaración anterior es un solo puntero, pero puede haber más que esto. Esto se llama niveles de punteros . Según ANSI C, cada compilador debe tener al menos 12 niveles de punteros. Esto significa que podemos usar 12 * símbolos con un nombre de variable.
Nivel de punteros en C/C++ : 
el nivel de punteros o, por ejemplo, la string puede subir al nivel N dependiendo del tamaño de la memoria. Si desea crear un puntero de nivel 5 , debe preceder el nombre de la variable del puntero con 5 asteriscos (*) en el momento de la declaración. 
Sintaxis: 
 

// level-1 pointer declaration
datatype *pointer; 

// level-2 pointer declaration
datatype **pointer; 

// level-3 pointer declaration
datatype ***pointer; 
.
.
and so on

El nivel del puntero depende de cuántos asteriscos preceda la variable de puntero en el momento de la declaración.
Declaración: 
 

int *pointer_1;
int **pointer_2;
int ***pointer_3;
.
.
and so on

A continuación se muestran los programas para ilustrar los distintos niveles de punteros:
Programa 1: 
 

C

// C program to illustrate levels of pointer
#include <stdio.h>
 
// Driver Code
int main()
{
    int var = 10;
 
    // Pointer level-1
    // Declaring pointer to  var
    int* ptr1;
 
    // Pointer level-2
    // Declaring pointer to pointer
    // variable *ptr1
    int** ptr2;
 
    // Pointer level-3
    // Declaring pointer to double
    // pointer **ptr2
    int*** ptr3;
 
    // Storing address of var
    // to pointer variable ptr1
    ptr1 = &var;
 
    // Storing address of pointer
    // ptr1 to level-2 ptr2
    ptr2 = &ptr1;
 
    // Storing address of level-2
    // ptr2 to level-3 pointer ptr3
    ptr3 = &ptr2;
 
    // Displaying values
    printf("Value of variable "
           "var = %d\n",
           var);
    printf("Value of variable var using"
           " pointer ptr1 = %d\n",
           *ptr1);
    printf("Value of variable var using"
           " pointer ptr2 = %d\n",
           **ptr2);
    printf("Value of variable var using"
           " pointer ptr3 = %d\n",
           ***ptr3);
 
    return 0;
}

C++

// C++ program to illustrate
// levels of pointer
#include <bits/stdc++.h>
using namespace std;
 
// Driver Code
int main()
{
    int var = 10;
 
    // Pointer level-1
    // Declaring pointer to  var
    int* ptr1;
 
    // Pointer level-2
    // Declaring pointer to pointer
    // variable *ptr1
    int** ptr2;
 
    // Pointer level-3
    // Declaring pointer to double
    // pointer **ptr2
    int*** ptr3;
 
    // Storing address of var
    // to pointer variable ptr1
    ptr1 = &var;
 
    // Storing address of pointer
    // ptr1 to level-2 ptr2
    ptr2 = &ptr1;
 
    // Storing address of level-2
    // ptr2 to level-3 pointer ptr3
    ptr3 = &ptr2;
 
    // Displaying values
    cout << "Value of variable var is "
         << var << endl;
 
    cout << "Value of variable var "
         << "using pointer ptr1 is "
         << *ptr1 << endl;
 
    cout << "Value of variable var "
         << "using pointer ptr2 is "
         << **ptr2 << endl;
 
    cout << "Value of variable var "
         << "using pointer ptr3 is "
         << ***ptr3 << endl;
 
    return 0;
}
Producción: 

Value of variable var = 10
Value of variable var using pointer ptr1 = 10
Value of variable var using pointer ptr2 = 10
Value of variable var using pointer ptr3 = 10

 

Programa 2: 
 

C

// C program to illustrate
// levels of pointer
#include <stdio.h>
 
// Driver Code
int main()
{
    float var = 23.564327;
 
    // Declaring pointer variables
    // upto level_4
    float *ptr1, **ptr2, ***ptr3, ****ptr4;
 
    // Initializing pointer
    // variables
    ptr1 = &var;
    ptr2 = &ptr1;
    ptr3 = &ptr2;
    ptr4 = &ptr3;
 
    // Printing values
    printf("Value of var = %f\n", var);
    printf("Value of var using level-1"
           " pointer = %f\n",
           *ptr1);
 
    printf("Value of var using level-2"
           " pointer = %f\n",
           **ptr2);
 
    printf("Value of var using level-3"
           " pointer = %f\n",
           ***ptr3);
 
    printf("Value of var using level-4"
           " pointer = %f\n",
           ****ptr4);
 
    return 0;
}

C++

// C++ program to illustrate
// levels of pointer
#include <bits/stdc++.h>
using namespace std;
 
// Driver Code
int main()
{
    float var = 23.564327;
 
    // Declaring pointer variables
    // upto level_4
    float *ptr1, **ptr2, ***ptr3, ****ptr4;
 
    // Initializing pointer
    // variables
    ptr1 = &var;
    ptr2 = &ptr1;
    ptr3 = &ptr2;
    ptr4 = &ptr3;
 
    // Printing values
    cout << "Value of var is "
         << var << endl;
 
    cout << "Value of var using level-1"
         << " pointer is "
         << *ptr1 << endl;
 
    cout << "Value of var using level-2"
         << " pointer is "
         << **ptr2 << endl;
 
    cout << "Value of var using level-3"
         << " pointer is "
         << ***ptr3 << endl;
 
    cout << "Value of var using level-4"
         << " pointer is "
         << ****ptr4 << endl;
 
    return 0;
}
Producción: 

Value of var = 23.564327
Value of var using level-1 pointer = 23.564327
Value of var using level-2 pointer = 23.564327
Value of var using level-3 pointer = 23.564327
Value of var using level-4 pointer = 23.564327

 

Explicación: 
el código anterior donde hemos tomado el tipo de datos flotante de la variable, por lo que ahora también tenemos que tomar el mismo tipo de datos para la string de punteros. Dado que el puntero y la variable a la que apunta deben tener el mismo tipo de datos.
Programa 3: 
 

C

// C program to illustrate
// levels of pointer
#include <stdio.h>
 
// Driver Code
int main()
{
    // Initializing integer variable
    int var = 10;
 
    // Declaring pointer variables
    // upto level-3
    int *ptr1, **ptr2, ***ptr3;
 
    // Initializing pointer variables
    ptr1 = &var;
    ptr2 = &ptr1;
    ptr3 = &ptr2;
 
    // Printing values BEFORE updation
    printf("Before:\n");
    printf("Value of var = %d\n", var);
 
    printf("Value of var using level-1"
           " pointer = %d\n",
           *ptr1);
 
    printf("Value of var using level-2"
           " pointer = %d\n",
           **ptr2);
 
    printf("Value of var using level-3"
           " pointer = %d\n",
           ***ptr3);
 
    // Updating var's value using
    // level-3 pointer
    ***ptr3 = 35;
 
    // Printing values AFTER updation
    printf("After:\n");
    printf("Value of var = %d\n", var);
 
    printf("Value of var using level-1"
           " pointer = %d\n",
           *ptr1);
 
    printf("Value of var using level-2"
           " pointer = %d\n",
           **ptr2);
 
    printf("Value of var using level-3"
           " pointer = %d\n",
           ***ptr3);
 
    return 0;
}

C++

// C++ program to illustrate
// levels of pointer
#include <bits/stdc++.h>
using namespace std;
 
// Driver Code
int main()
{
    // Initializing integer variable
    int var = 10;
 
    // Declaring pointer variables
    // upto level-3
    int *ptr1, **ptr2, ***ptr3;
 
    // Initializing pointer variables
    ptr1 = &var;
    ptr2 = &ptr1;
    ptr3 = &ptr2;
 
    // Printing values BEFORE updation
    cout << "Before:" << endl;
 
    cout << "Value of var is " << var
         << endl;
 
    cout << "Value of var using level-1"
         << " pointer is "
         << *ptr1 << endl;
 
    cout << "Value of var using level-2"
         << " pointer is "
         << **ptr2 << endl;
 
    cout << "Value of var using level-3"
         << " pointer is "
         << ***ptr3 << endl;
 
    // Updating var's value using
    // level-3 pointer
    ***ptr3 = 35;
 
    // Printing values AFTER updation
    cout << "After:" << endl;
 
    cout << "Value of var is " << var
         << endl;
 
    cout << "Value of var using level-1"
         << " pointer is "
         << *ptr1 << endl;
 
    cout << "Value of var using level-2"
         << " pointer is "
         << **ptr2 << endl;
 
    cout << "Value of var using level-3"
         << " pointer is "
         << ***ptr3 << endl;
 
    return 0;
}
Producción: 

Before:
Value of var = 10
Value of var using level-1 pointer = 10
Value of var using level-2 pointer = 10
Value of var using level-3 pointer = 10
After:
Value of var = 35
Value of var using level-1 pointer = 35
Value of var using level-2 pointer = 35
Value of var using level-3 pointer = 35

 

Explicación: 
Como ya sabemos que un puntero apunta a la dirección de la ubicación de una variable, cuando accedemos al valor de un puntero que apunta al valor de la variable. Ahora, para actualizar el valor de la variable, podemos usar cualquier nivel de puntero ya que, en última instancia, cada puntero apunta directa o indirectamente solo a esa variable. Cambiará directamente el valor presente en la ubicación de la dirección de la variable.
 

Publicación traducida automáticamente

Artículo escrito por mohitg593 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *