Как передать ссылку на C ++ на указатель аргумента функции C? - PullRequest
4 голосов
/ 06 декабря 2010

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

3 голосов
/ 06 декабря 2010

Вы используете правильно, чтобы сделать &myVar, чтобы получить его адрес и передать функции, которая хочет указательВзятие адреса «ссылки» аналогично получению адреса референта.

1 голос
/ 06 декабря 2010

Код, с которым вы столкнулись, неверен. Нет способа передать ссылку на функцию, для которой требуется указатель. По крайней мере, не для int.

0 голосов
/ 06 декабря 2010

Используйте оператор &.Без него вы пытаетесь неверно конвертировать int в int*.

0 голосов
/ 06 декабря 2010

На самом деле это:

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

помещает в p2 адрес x, так что это то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...