2010-12-17 12 views
6

Esta función necesita pasar un puntero a un puntero.C: ¿cómo accedes al valor de un puntero a un puntero a ese valor?

void get_name(person** p) { 
    puts(p->name); // this is probably wrong 
} 

Éste es cómo llamar a la función (no estoy seguro de esto tampoco):

int main() { 
    ... 

    get_name(&person); // is this wrong? 

    ... 
    return 0; 
} 

persona es, obviamente, una estructura con una propiedad de nombre que es una cadena.

¿Cómo se refiere al valor * p apunta a desde ** p?

+2

El tipo de retorno adecuado de 'main' es' int', no 'void'. –

+0

Lo sé, pero aquí quería ahorrar el "retorno 0"; al final, lo cambié. – Gal

Respuesta

12

x->y es solo un atajo para (*x).y. * realiza vía indirecta (es decir, se le da la cosa a la que apunta el puntero), por lo que necesita para llevar a cabo indirección dos veces para conseguir lo señaló el puntero que se apuntada por el puntero:

(**p).name 
(*p)->name 

Si person es el nombre de una estructura typedefed, entonces get_name(&person) no es correcto; se necesita una instancia de esa estructura y que necesita un puntero a esa instancia que se puede pasar a la función:

int main() { 
    person p; 
    person* pp = &p; 
    get_name(&pp); 
} 

Sin embargo, no se sabe exactamente por qué get_name tiene que tomar una person**; presumiblemente un person* sería suficiente.

+0

sí, esto funciona. – Gal

Cuestiones relacionadas