當我們把一個指針作爲一個參數傳遞給函數時,其實是把指針的copy傳遞給了函數,也可以說傳遞指針是指針的值傳遞。
如果我們在函數內部修改指針,修改的只是指針的copy而不是指針本身。代碼驗證如下:
#include<iostream>
using namespace std;
int num1 = 1;
void func(int* p)
{
p = &num1;
cout << p << endl;
cout << *p << endl;
}
int main()
{
int num2 = 2;
int *p = &num2;
cout << p << endl;
cout << *p << endl;
func(p);
cout << p << endl;
cout << *p << endl;
return 0;
}
指針的指針
#include<iostream>
using namespace std;
int num1 = 1;
void func(int** p)
{
<span style="white-space:pre"> </span>*p = &num1;
<span style="white-space:pre"> </span>**p = 5;
<span style="white-space:pre"> </span>cout << p << ' ' << *p << ' ' << **p << ' ' << num1 << endl;
}
int main()
{
<span style="white-space:pre"> </span>int num2 = 2;
<span style="white-space:pre"> </span>int *pnum2 = &num2;
<span style="white-space:pre"> </span>cout << pnum2 << ' ' << *pnum2 << endl;
<span style="white-space:pre"> </span>func(&pnum2);
<span style="white-space:pre"> </span>cout << pnum2 << ' ' << *pnum2 << endl;
<span style="white-space:pre"> </span>return 0;
}
在函數func中:
p是一個指針的指針
*p是被指向的指針,我們修改它,修改的是被指向的指針的內容,即main函數中的指針p
**p兩次解引用是指向main函數的*p的內容
指針的引用
#include<iostream>
using namespace std;
int num1 = 1;
void func(int* &p)
{
p = &num1;
*p = 5;
cout << p << ' ' << *p << ' ' << num1 << endl;
}
int main()
{
int num2 = 2;
int *pnum2 = &num2;
cout << pnum2 << ' ' << *pnum2 << endl;
func(pnum2);
cout << pnum2 << ' ' << *pnum2 << endl;
return 0;
}
在func函數中:
p是指針的引用,即main函數裏中的pnum2
*p是main函數中pnum2指向的內容