我只想在这里查看如何将引用传递给想要指针的函数。我有一个代码示例如下。在我的例子中,我将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 :(得分:3)
您的用法是正确的,要&myVar
获取它的地址并传递给想要指针的函数。取“引用”的地址与获取引用的地址相同。
答案 1 :(得分:1)
您遇到的代码是错误的。您无法将引用传递给需要指针的函数。至少,不适用于int
。
答案 2 :(得分:0)
实际上这是:
int x = 0;
int &r = x;
int *p2 = &r;
将p2
的地址放入x
,这就是您所需要的。
答案 3 :(得分:0)
使用&
运算符。没有它,您尝试将int
无效转换为int*
。