指向指針的指針和指針的引用

當我們把一個指針作爲一個參數傳遞給函數時,其實是把指針的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指向的內容





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章