usage of double pointers as arguments

21,839

Solution 1

int **p is a pointer to a pointer-to-int. My_Func(int **p) works by changing the value of integer that the pointer-to-int points to i.e. int a.

Without changing the implementation, the function will not work with a pointer-to-int parameter int *p as there is a second level of indirection. In addition, you're setting the value to a local variable that is created on the stack. When the function is completed the memory used for the variable will be reclaimed, therefore making the value of a invalid.

void My_Func(int **p)
{
     int val = 100; // Local variable.
     int *Ptr = &val; // This isn't needed.
     *p = Ptr;
} // val dissapears.

Remove the second level of indirection and copy val by value instead of pointing to it:

#include <stdio.h>

void My_Func(int *p) 
{
    int val = 100;
    *p = val;
}

int main(void) 
{
    int a = 5;
    My_Func(&a);
    printf("The val of a is %d\n", a);
    return 0;
}

Solution 2

In short, in C when you pass something as a parameter, a copy will be passed to the function. Changing the copy doesn't affect the original value.

However, if the value is a pointer, what it points to can be changed. In this case, if you want to affect the pointer, you need to pass a pointer to it down to the function.

Share:
21,839
Maddy
Author by

Maddy

Updated on August 06, 2020

Comments

  • Maddy
    Maddy almost 4 years

    Please find the code snippet as shown below:

    #include <stdio.h> 
    
    int My_func(int **); 
    
    int main() 
    { 
         int a =5;
         int *p = &a;
         My_Func(&p);
         printf("The val of *p is %d\n,*p);
    }
    
    void My_Func(int **p)
    {
         int val = 100;
         int *Ptr = &val;
         *p = Ptr;
    }
    

    How does by using a double pointer as a argument in my_Func function and making change of value reflects the same in the main function but if we use a single pointer in My_Func does not change the value in main?Please do explain me with examples if possible

    Advanced thanks
    Maddy

  • Unheilig
    Unheilig about 10 years
    I am late here, hope you don't mind I ask: I have the exact problem, I tried passing both single and double pointers and change the value within a function, in both cases, the original values did get changed. My understanding is that we need to use a double pointer to change the original value within a function. Hope you could shred some light on this. Thanks in advance.