2

だから私はポインタについて合理的に理解していますが、これらの違いは何ですかと尋ねられました:

void print(int* &pointer)

void print(int* pointer)

私はまだ学生で、100%ではありません。これが基本的なものである場合は申し訳ありませんが、私のグーグルスキルは私を失敗させました. とにかく、この概念をもう少しよく理解するのを手伝ってくれることはありますか? 私は長い間 c++ を使用していませんでしたが、学生の家庭教師を手伝おうとしています。また、彼女のために概念的な知識を固めようとしています。

4

2 に答える 2

5

1つ目は参照によってポインターを渡し、2つ目は値によって渡します。

最初の署名を使用する場合は、ポインタが指すメモリと、ポインタが指すメモリの両方を変更できます。

例えば:

void printR(int*& pointer)   //by reference
{
   *pointer = 5;
   pointer = NULL;
}
void printV(int* pointer)    //by value
{
   *pointer = 3;
   pointer = NULL;
}

int* x = new int(4);
int* y = x;

printV(x);
//the pointer is passed by value
//the pointer itself cannot be changed
//the value it points to is changed from 4 to 3
assert ( *x == 3 );
assert ( x != NULL );

printR(x);
//here, we pass it by reference
//the pointer is changed - now is NULL
//also the original value is changed, from 3 to 5
assert ( x == NULL );    // x is now NULL
assert ( *y = 5 ;)
于 2012-04-30T07:37:04.110 に答える
0

1 つ目は参照によってポインタを渡します。参照渡しの場合、関数は渡された引数の値を変更できます。

void print(int* &pointer)
{
  print(*i);  // prints the value at i
  move_next(i);  // changes the value of i. i points to another int now
}

void f()
{
  int* i = init_pointer();
  while(i)
    print(i);  // prints the value of *i, and moves i to the next int.
}
于 2012-04-30T07:42:37.893 に答える