程式設計 微知識(十) 雙重指標介紹

指標(Pointer)

是一種變數,用來儲存記憶體位置,儲存在記憶體中的可能是字元或是整數或是指標本身變數的位置...等等,而只編本身也是一個變數,所以也會有記憶體空間,而指標的記憶體空間位址同樣也可以使用"&"運算子就可以知道了;程式可以直接取得該指標所指位置的變數值。指標通常用來節省記憶體空間以及減少不必要的搬動,如果使用不當的話很容易造成系統或程式的錯誤。

雙重指標的作用為間接參考,也就是記錄著指標以及指標指到的位置,而至於三重指標也只是記錄著雙重指標內的位置...等等依此類推。

本文以C++實作介紹

宣告一個變數:

int number;

宣告一個指標:

int* ptr

宣告一個指標儲存變數的位址

//第一種方式 不賦予初值的宣告方式
int number=10;
int *ptr;
ptr = &number;//&number代表number所在的記憶體位址
//第二種方式 賦予初值的宣告方式
int number=10;
int* ptr = &number;//&number代表number所在的記憶體位址,這個寫法代表將number的位址(&number)存到ptr中

雙重指標宣告方式:

int number = 10;
int* ptr1 =&number;//ptr1指標存著number的記憶體位址
int** ptr2 =&ptr1;//ptr2指標存著ptr1的記憶體位址

實作程式碼如下:

#include <iostream>
using namespace std;

int main()
{

	int number = 10;//宣告變數number
	int* ptr1 = &number;//宣告指標ptr1 指向 number的記憶體位址

	cout << "number:" << number << endl;//number的值
	cout << "&number:" << &number << endl;//number的記憶體位址

	cout << endl;

	cout << "ptr1:" << ptr1 << endl;//ptr1儲存指到的內容(number)的位址(&number)
	cout << "*ptr1:" << *ptr1 << endl;//ptr1指到的內容(number)的值(10)
	cout << "&ptr1:" << &ptr1 << endl;//ptr1的記憶體位址


	cout << endl;

	int** ptr2 = &ptr1;//宣告雙重指標ptr2 指向 ptr1的記憶體位址

	cout << "ptr2:" << ptr2 << endl;//ptr2儲存指到的內容(ptr1)的記憶體位址(&ptr1)
	cout << "*ptr2: " << *ptr2 << endl;//*ptr2=ptr1, ptr2指到的內容(ptr1)的值(ptr1儲存指到的內容(number)的位址(&number))
	cout << "**ptr2: " << **ptr2 << endl;//**ptr2=*ptr1 也就是ptr1指到的內容的值(ptr1指到的內容(number)的值(10))
	cout << "&ptr2: " << &ptr2 << endl;//ptr2自己的記憶體位址

	system("pause");
	return 0;
}

執行結果如下:

有夢最美 築夢踏實

活在當下 認真過每一天

我是阿夢 也是Ace