2010-12-17 94 views
6

這個函數需要傳遞一個指向指針的指針。C - 你如何從一個指向指向該值的指針訪問值?

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

這是我如何調用該函數(我不知道這兩種):

int main() { 
    ... 

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

    ... 
    return 0; 
} 

人顯然是有名稱屬性,它是一個字符串結構。

你如何引用** p指向** p的值?

+2

main'的'正確的返回類型爲'int',不'void'。 – 2010-12-17 22:27:11

+0

我知道,但在這裏我想省掉「迴歸0」。最後,我改變了它。 – Gal 2010-12-17 22:29:22

回答

12

x->y只是(*x).y的快捷方式。 *執行間接(即,它給你的東西指向指針),所以你需要執行間接兩次得到的東西指出,由該指針指向的指針:

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

如果person是一個typedefed結構體的名稱,那麼get_name(&person)是不正確的;你需要的是結構的實例,你需要一個指針,例如,你可以傳遞給函數:

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

但是,它不完全清楚爲什麼get_name需要採取person**;據推測,person*就足夠了。

+0

是的這個作品。 – Gal 2010-12-17 22:30:01