2010-12-06 15 views
4

ポインタを必要とする関数への参照を渡す方法をここで確認したいだけです。以下のコード例があります。私の場合は、私の価値を変えるC関数へのC++参照を渡しています。C関数のポインタ引数にC++参照を渡すにはどうすればよいですか?

この呼び出しでoperatorのアドレス「&」を使用する必要があります:retCode = MyCFunc(& myVar)?私はC + +で許可されていない参照の参照を取っているようです。しかし、それはうまくコンパイルされ、動作するようです。

MainFunc() 
{ 

    int retCode = 0; 
    unsigned long myVar = 0; 

    retCode = MyCPlusPlusFunc(myVar); 

    // use myVars new value for some checks 
    ... 
    ... 
} 

int MyCPlusPlusFunc(unsigned long& myVar) 
{ 
    int retCode = 0; 
    retCode=MyCFunc(&myVar); 
    return retCode; 
} 

int MyCFunc (unsigned long* myVar) 
{ 
    *myVar = 5; 
} 

私は(彼らは演算子の「&」のアドレスを使用して渡すことはありません)私はIBMのサイトでこの例を見るまで、大丈夫だった私のコードは、上記と思った: http://publib.boulder.ibm.com/infocenter/zos/v1r11/index.jsp?topic=/com.ibm.zos.r11.ceea400/ceea417020.htm

// C++ Usage 
extern "C" { 
    int cfunc(int *); 
} 

main() 
{ 
    int result, y=5; 
    int& x=y; 

    result=cfunc(x); /* by reference */ 
    if (y==6) 
    printf("It worked!\n"); 


// C Subroutine 
cfunc(int *newval) 
{ 
    // receive into pointer 
    ++(*newval); 
    return *newval; 
} 
一般的に

、私はあなたが次のことを行うことができます知っている:

int x = 0; 
int &r = x; 
int *p2 = &r; //assign pointer to a reference 

何が正しいですか?私は電話でオペレータの&のアドレスを使用する必要がありますか?

+0

編集フォームの適切なボタンを使用してコードを修正してください。 – Muggen

+0

@Muggen - 私はすでにそれをしました –

+0

ありがとう...今より良く見えます! – Lair78

答えて

3

使用方法は正しいです。&myVarを使用してアドレスを取得し、ポインタを必要とする関数に渡します。 '参照'のアドレスを取ることは、参照対象のアドレスを取ることと同じです。

+0

downvoteの理由は? – birryree

+0

ありがとうございます。そのIBMのリンクのコード例を見てから、サニティチェックをしたかっただけです。 – Lair78

0

実はこの:

int x = 0; 
int &r = x; 
int *p2 = &r; 

p2xのアドレスを置きますので、それはあなたが必要なものです。

1

あなたが遭遇したコードは間違っています。ポインターを必要とする関数への参照を渡す方法はありません。少なくとも、intではありません。

+0

ええ、あなたは正しいです。私は狂っていないことを確認したかっただけです。ありがとう! – Lair78

0

&オペレータを使用してください。それがなければ、無効な変換をintからint*にしようとしています。

関連する問題