2012-04-30 94 views
1

所以我有一個指針有一定的瞭解,但我問是什麼之間的區別是:C++概念的幫助,指針

void print(int* &pointer) 

void print(int* pointer) 

我還是個學生本人和IM不是100%。對不起,如果這是基本的,但我的谷歌技能失敗了我。無論如何,你可以幫助我更好地理解這個概念。我很久沒有使用C++了,我正在幫助輔導一個學生,我正在努力鞏固我對她的概念知識。

回答

5

第一個通過引用傳遞指針,第二個通過值傳遞。

如果使用第一個簽名,則可以修改指針指向的內存以及它指向的內存。

例如:

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 ;) 
0

第一經過參考指針。 如果您通過引用傳遞函數可以更改傳遞參數的值。

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. 
}