Подтвердить что ты не робот

Что означает * и значение в параметре функции

Если у меня есть функция, которая принимает int *&, что это значит? Как я могу передать только int или указатель int для этой функции?

function(int *& mynumber);

Всякий раз, когда я пытаюсь передать указатель на эту функцию, он говорит:

error: no matching function for call to 'function(int *)'
note: candidate is 'function(int *&)'
4b9b3361

Ответ 1

Это ссылка на указатель на int. Это означает, что рассматриваемая функция может изменить указатель, а также сам int.

Вы можете просто передать указатель, причем одно из осложнений заключается в том, что указатель должен быть l-значением, а не только r-значением, например,

int myint;
function(&myint);

один не является достаточным, и ни один из них не может быть допустимым 0/NULL, где as:

int myint;
int *myintptr = &myint;
function(myintptr);

будет приемлемым. Когда функция вернет, вполне возможно, что myintptr больше не будет указывать на то, на что она первоначально указывала.

int *myintptr = NULL;
function(myintptr);

может также иметь смысл, если функция ожидала выделить память при указании NULL. Проверьте документацию, предоставленную функцией (или прочитайте источник!), Чтобы увидеть, как будет использоваться указатель.

Ответ 2

Просто: ссылка на указатель.

В C без ссылок традиционный способ "переместить" указатель состоит в том, чтобы передать указатель на указатель:

void c_find(int** p, int val); /* *p will point to the node with value 'val' */

В С++ это может быть выражено ссылочным синтаксисом, чтобы избежать неловкого двойного разыменования.

void cpp_find(int*& p, int val); // p will point to the node with value 'val'

Ответ 3

Это означает ссылку на указатель на int. Другими словами, функция может изменить параметр, чтобы указать на что-то еще.

Чтобы передать переменную in, просто передайте int *. Как указывает awoodland, то, что прошло, должно быть l-value.

Edit:

Опираясь на пример awoodland:

#include <iostream>

void foo(int*& var)
{
    delete var;
    var = new int;
}

int main(int argc, char* argv[])
{
    int* var = NULL;

    std::cout << var << std::endl;

    foo(var);   // this function can/will change the value of the pointer

    std::cout << var << std::endl;

    delete var;

    return 0;
}

Ответ 4

function принимает единственный параметр mynumber, который является ссылкой на указатель на int.

Это полезно, когда вам нужно передать указатель на функцию, и эта функция может изменить указатель. Например, если вы выполняете функцию, выполните следующие действия:

function(int*& mynumber)
{
  if( !mynumber )
    mynumber = new int;
  *mynumber = 42;
}

... Тогда в вызывающем коде может произойти что-то подобное:

int main()
{
  int* mynumber = 0;
  function(mynumber); // function will change what "mynumber" points to
  cout << *mynumber;
  return 0;
}

Ответ 5

Это ссылка на указатель на int - вам нужно передать в адрес int эту функцию, и имейте в виду, что функция может изменить указатель через ссылку.

Немой пример:

void func(int*& iref) 
{
    iref = new int;
}

int main()
{
    int i(0);
    int* pi(&i);

    func(pi);
    // pi no longer equal to &i

    return 0;
}