Referencia a un puntero en C++ con ejemplos y aplicaciones

Al igual que las referencias a tipos de datos simples, podemos tener referencias a punteros .

// CPP program to demonstrate references to pointers.
#include <iostream>
using namespace std;
  
int main()
{
    int x = 10;
  
    // ptr1 holds address of x
    int* ptr1 = &x;
  
    // Now ptr2 also holds address of x.
    // But note that pt2 is an alias of ptr1.
    // So if we change any of these two to
    // hold some other address, the other
    // pointer will also change.
    int*& ptr2 = ptr1;
  
    int y = 20;
    ptr2 = &y;
  
    // Below line prints 20, 20, 10, 20
    // Note that ptr1 also starts pointing
    // to y.
    cout << *ptr1 << " " << *ptr2 << " "
         << x << " " << y;
  
    return 0;
}
Producción:

20 20 10 20

¿Cuál es la aplicación de arriba?
Considere una situación en la que pasamos un puntero a una función y queremos que la función modifique el puntero para que apunte a otra cosa y queremos que estos cambios se reflejen en la persona que llama. Por ejemplo, al escribir una función de lista enlazada que cambia el encabezado, pasamos la referencia al puntero al encabezado para que la función pueda cambiar el encabezado (una alternativa es devolver el encabezado). También podemos lograr lo mismo usando punteros dobles .

// A C++ program to demonstrate application
// of reference to a pointer.
#include <iostream>
using namespace std;
  
// A linked list node
struct Node {
    int data;
    struct Node* next;
};
  
/* Given a reference to pointer to the head of
   a list, insert a new value x at head */
void push(struct Node *&head, int x)
{
    struct Node* new_node = new Node;
    new_node->data = x;
    new_node->next = head;
    head = new_node;
}
  
// This function prints contents of linked
// list starting from head
void printList(struct Node* node)
{
    while (node != NULL) {
        cout << node->data << " ";
        node = node->next;
    }
}
  
/* Driver program to test above functions*/
int main()
{
    /* Start with the empty list */
    struct Node* head = NULL;
    push(head, 1);
    push(head, 2);
    push(head, 3);
  
    printList(head);
  
    return 0;
}
Producción:

3 2 1

Publicación traducida automáticamente

Artículo escrito por HarshitDawar55 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 *