1
所以我有一個指針有一定的瞭解,但我問是什麼之間的區別是:C++概念的幫助,指針
void print(int* &pointer)
void print(int* pointer)
我還是個學生本人和IM不是100%。對不起,如果這是基本的,但我的谷歌技能失敗了我。無論如何,你可以幫助我更好地理解這個概念。我很久沒有使用C++了,我正在幫助輔導一個學生,我正在努力鞏固我對她的概念知識。
所以我有一個指針有一定的瞭解,但我問是什麼之間的區別是:C++概念的幫助,指針
void print(int* &pointer)
void print(int* pointer)
我還是個學生本人和IM不是100%。對不起,如果這是基本的,但我的谷歌技能失敗了我。無論如何,你可以幫助我更好地理解這個概念。我很久沒有使用C++了,我正在幫助輔導一個學生,我正在努力鞏固我對她的概念知識。
第一個通過引用傳遞指針,第二個通過值傳遞。
如果使用第一個簽名,則可以修改指針指向的內存以及它指向的內存。
例如:
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 ;)
第一經過參考指針。 如果您通過引用傳遞函數可以更改傳遞參數的值。
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.
}