2016-11-12 26 views
0

2つのポインタ引数を受け入れる関数が1つあります。これは、ポインタを使用して関数内で関数を呼び出す - C

void add(u16 *x, u16 *y) 

だと私は3つのポインタ引数を受け入れる機能があると言うことができます。

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

実際以内の一定の基準が満たされた場合、私は、機能追加に引数aとbのを渡したいが、私は参照することにより、値ではなく、それらを渡したいです。どのように私はこれを行うことができますか? a、b、c、x、およびyはすべて、関数を呼び出すときに "& 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は2つの引数をとります。どちらもへのポインタです。つまり、u16*です。 factには、3つの変数(すべてu16*)があります。種類は、既に一致し、あなたはとしてそれを呼び出す必要があります:あなたはその後、参照することにより、実際の整数値を渡すことと同じである値によってポインタを渡している

add(a, b); 

。必要に応じてポインタへのポインタを渡すことができますが、ポインタを値渡しするよりも一般的ではありません。

関連する問題