Я просто хочу проверить, как передать ссылку на функцию, которая хочет указатель. У меня есть пример кода ниже. В моем случае я передаю ссылку 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
Что правильно? Должен ли я использовать & адрес оператора в моем звонке или нет?