Diferencia entre pasar puntero a puntero y dirección de puntero a cualquier función

En este artículo, las diferencias entre pasar «puntero a puntero» y «dirección de puntero» a una función. En el lenguaje de programación C o C++ , se sabe que los punteros contienen la dirección de las variables o cualquier ubicación de memoria . Si los punteros apuntan a la ubicación de la memoria, se puede usar para cambiar el valor de la variable.

En cuanto a las funciones, cualquier puntero se puede pasar por sí mismo o por la dirección del puntero . Pero si la ubicación de memoria del puntero se va a cambiar permanentemente fuera de la función, debe capturarse con una referencia o doble puntero dentro de la función, es decir, asumiendo que se crea cualquier memoria dentro de la función local.

Posteriormente, se apunta al puntero capturado por la función sin ninguna referencia o doble puntero. En esta situación, no hay cambio dentro de la función principal porque no fue capturado por referencia o doble puntero dentro de la definición de la función .

Programa 1:

C++

// C++ program to illustrate the
// concepts pointers
  
#include <iostream>
#include <stdlib.h>
using namespace std;
  
// Function to assign the value of
// pointer ptr to another location
void foo(int* ptr)
{
    int b = 2;
  
    // ptr= (int*)malloc(sizeof(int));
    // It can be executed instead of
    // the ptr=&b but nothing change
    ptr = &b;
}
  
// Driver Code
int main()
{
    int a = 5;
    int* ptr = &a;
  
    cout << "Before the function ptr: "
         << *ptr << endl;
    foo(ptr);
  
    cout << "After the function ptr: "
         << *ptr << endl;
  
    return 0;
}
Producción:

Before the function ptr: 5
After the function ptr: 5

Explicación: La razón por la que no hay cambios en la salida es que se crea un puntero de copia para la función. Entonces, el cambio en la dirección del puntero no se refleja fuera de la función. Se pueden usar referencias o doble puntero para esto.

Programa 2:

C++

// C++ program to illustrate the
// concepts of pointer
  
#include <iostream>
#include <stdlib.h>
using namespace std;
  
// Function to change the pointer ptr
void foo(int* ptr)
{
    int b = 2;
  
    // The change will only be for
    // the new value of the ptr
    *ptr = b;
}
  
// Driver Code
int main()
{
  
    int a = 5;
    int* ptr = &a;
  
    cout << "Before the function, "
         << "new value of the ptr: "
         << *ptr << endl;
  
    // Function Call
    foo(ptr);
  
    cout << "After the function, "
         << "new value of the ptr: "
         << *ptr << endl;
  
    return 0;
}
Producción:

Before the function, new value of the ptr: 5
After the function, new value of the ptr: 2

Explicación:

Si se desea reemplazar la memoria almacenada en ptr cuando se completa la función foo() , se debe capturar ptr con la referencia o doble puntero en la función foo() .

Programa 3:

C++

// C++ program to illustrate the
// concepts of pointer
#include <iostream>
#include <stdlib.h>
using namespace std;
  
// Function to change the value of
// the pointers ptr1
void foo(int** ptr1)
{
    int b = 2;
  
    // ptr = &b;
    // For this assignment, the
    // captured value will be like
    // void foo(int* &ptr)
    *ptr1 = &b;
}
  
// Driver Code
int main()
{
    int a = 5;
    int* ptr = &a;
  
    cout << "Before the function, "
         << "new value of the ptr: "
         << *ptr << endl;
  
    // Function Call
    foo(&ptr);
  
    cout << "After the function, "
         << "new value of the ptr: "
         << *ptr << endl;
  
    return 0;
}
Producción:

Before the function, new value of the ptr: 5
After the function, new value of the ptr: 2

Explicación:

Publicación traducida automáticamente

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