Por favor, encontrar el fragmento de código como se muestra a continuación:

#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;
}

Cómo se hace mediante el uso de un doble puntero como un argumento en my_Func función y hacer que el cambio de valor refleja la misma en la función principal, pero si usamos un solo puntero en My_Func no cambia el valor en la principal?Por favor me explique con ejemplos si es posible

Avanzado gracias

Maddy

  • Como una nota del lado, no devuelven punteros a las variables locales. Cuando he vuelto de una función, sus variables locales ya no son validos.
  • Por favor explique lo que usted está tratando de lograr.
  • Yo sólo quería saber por qué argumentos como doble punteros de reflejar el valor principal cuando se cambia en el My_func definición?
InformationsquelleAutor Maddy | 2013-06-09

4 Comentarios

  1. 5

    int **p es un puntero a un puntero-a-int. My_Func(int **p) funciona cambiando el valor de entero que el puntero-a-int puntos a decir int a.

    Sin necesidad de cambiar la aplicación, la función no funcionará con un puntero-a-int parámetro int *p como hay un segundo nivel de direccionamiento indirecto. Además, se está estableciendo el valor a una variable local que se crea en la pila. Cuando la función se ha completado la memoria utilizada para la variable que se va a recuperar, por lo tanto el valor de a no válido.

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

    Quitar el segundo nivel de indirección y copia val por valor, en lugar de señalar:

    #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;
    }
  2. 4

    En definitiva, en la C cuando pasa algo como un parámetro, un copia serán pasados a la función. El cambio de la copia no afecta al valor original.

    Sin embargo, si el valor es un puntero, lo que puntos a puede ser cambiado. En este caso, si usted quiere afectar el puntero, usted necesita para pasar un puntero a la abajo a la función.

  3. 0

    Utilizar en la declaración de la función:

    void func(int *p)
    {
      int val =100;
      int *temp=&val;
      p=temp;
     }

    p comienza apuntando a otra dirección como la dirección de val. Así que se va a imprimir el valor de 100.

    Nota importante: pruébalo en tu descargado compilador (siempre en el caso de los punteros) no en la línea del compilador. El compilador en línea no mantener un seguimiento de la pérdida de direcciones en la pila.

  4. 0

    De asignar la dirección de la variable local, que pronto desaparecerá cuando My_Func devuelve. Puede utilizar el siguiente en el código. Sin embargo, usted puede hacer la misma cosa solo con el único puntero, haga doble puntero no es necesario en este ejemplo.

    void My_Func(int **p)
    {
         int val = 100;
         int *Ptr = &val;
         **p = *Ptr;
    }
    • Estoy tarde aquí, espero no te importa me pregunto: tengo el problema exacto, he intentado pasar de simple y doble punteros y cambiar el valor dentro de una función, en ambos casos, los valores originales hicieron llegar cambiado. Mi entendimiento es que tenemos que utilizar un doble puntero para cambiar el valor original dentro de una función. Espero que usted puede triturar un poco de luz sobre esto. Gracias de antemano.

Dejar respuesta

Please enter your comment!
Please enter your name here