2010-12-06 60 views
4

我只想在這裏查看如何將引用傳遞給需要指針的函數。下面有一個代碼示例。在我的情況下,我將C++引用傳遞給C函數,這將改變我的值。如何將C++引用傳遞給C函數的指針參數?

我應該在這次調用中使用'&'運算符的地址: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 2010-12-06 17:40:51

+0

@Muggen - 我已經做到了 – 2010-12-06 17:41:41

+0

謝謝...現在看起來好多了! – Lair78 2010-12-06 17:43:22

回答

3

您的用法是正確的,要做&myVar來獲取它的地址並傳遞給需要指針的函數。採用「參考」的地址與採用所指對象的地址相同。

0

其實這個:

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

付諸p2x地址,所以這是你所需要的。

1

您遇到的代碼是錯誤的。您無法將引用傳遞給需要指針的函數。至少,不適用於int

0

使用&運算符。沒有它,你正在嘗試intint*的無效轉換。

相關問題