如何将C ++引用传递给C函数的指针参数?

时间:2010-12-06 17:39:23

标签: c++ pointers reference

我只想在这里查看如何将引用传递给想要指针的函数。我有一个代码示例如下。在我的例子中,我将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

什么是正确的?我应该使用&我打电话给接线员的地址?

4 个答案:

答案 0 :(得分:3)

您的用法是正确的,要&myVar获取它的地址并传递给想要指针的函数。取“引用”的地址与获取引用的地址相同。

答案 1 :(得分:1)

您遇到的代码是错误的。您无法将引用传递给需要指针的函数。至少,不适用于int

答案 2 :(得分:0)

实际上这是:

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

p2的地址放入x,这就是您所需要的。

答案 3 :(得分:0)

使用&运算符。没有它,您尝试将int无效转换为int*