2016-11-12 66 views
0

我有一個函數接受兩個指針參數。比方說這是函數內使用指針調用函數 - C

void add(u16 *x, u16 *y) 

而且我有另一個接受三個指針參數的函數。

void fact(u16 *a, u16 *b, u16 *c){ 
    if(*c > 500){ 
     add(*a,*b); // Is this correct? 
    } 
} 

如果實際上在一定條件被滿足,我要的參數a和b傳遞給函數添加,但我想通過引用傳遞它們,而不是價值。我該如何做到這一點?在調用函數時,a,b,c,x和y全部從「main」向下傳遞,使用「& x」。

所以我希望一切都通過引用傳遞下去,以便任何值修改都會返回到main。

非常感謝!

回答

1

add(* a,* b); // 它是否正確?

不,這是不正確的。

如果原型是void add(u16 *x, u16 *y),那麼調用函數應該調用匹配類型的參數。在fact()ab已經指針,所以正確的代碼應該是這樣的:

void fact(u16 *a, u16 *b, u16 *c){ 
    if(*c > 500){ 
     add(a,b); // this is correct 
    } 
} 
1

不,這是不正確的。我個人發現,如果您在類型旁邊寫上*而不是變量名,就會更容易理解。

您的功能add有兩個參數,都是指向u16的指針,即它們是u16*。在您的fact中,您有三個變量,全部爲u16*。類型匹配,所以你需要調用它爲:

add(a, b); 

然後你通過值,這相當於通過引用傳遞的實際整數值傳遞指針。您可以在需要時將指針傳遞給指針,但不如按值傳遞指針那麼普遍。