2009年5月1日 星期五

自我學習:指標參照

剛剛看了一下C_and_C++版
記一下重點...


預設
int a1;
int *a2;
a2 = &a1;

比較下列三式的不同所在

void func1(int *p1)
void func2(int* &p2)
void func3(int **p3)

==================================================

第一比較簡單

就是所謂的指標型態

在程式外圍須傳入指標形態 例如

func1(&a1);
or
func1(a2);

而在func中要更改p1內值須使用(*p1)

-----------------------------------------

第二個比較少見

他是指標的參照

在程式外圍需傳入指標的參照

也就是func2(&a1) or func2(a2);

跟第一很像

但&p2在編譯時不會另外配置空間

-----------------------------------------

第三個就常見多了

就是指標的指標

一般用在製作二維陣列上

例如:
int a[5][5];//此a為 二維指標
func3(a);

============================================

比較說明:

舉個例,一般的int a=5;

放置在記憶體0FFF這個位置

所以在程式中,a可以說是替代成0FFF

讀取a的話,會讀取到0FFF這個記憶體位置上的值,也就是5;

-------------------------------------------

而指標不同

舉個例:
int a = 6; //a表示的記憶體位置0FFF 內值為6
int* b; //b表示的記憶體位置0EEE 內值未定

此時,如果執行
b = &a;

在記憶體位址0EEE中的內值將會變成0FFF;

在讀取b時,要使用*b來讀取

系統知道b視為指標變數

會將b的內值是為真值的所在位置

也就是0FFF中的值 => 6

------------------------------------------
參照!

之前說了
int a=5; //a代表記憶體位址0FFF 內值為5
此時另設一個
int b; //b代表記憶體位址0EEE

執行
&b=a;的話
b代表的記憶體位址會改變,變成0FFF
所以a跟b都代表0FFF 內值為5

不過!

這只能執行在初始宣告中

也就是b的宣告時

所以只有下式是合法使用的

int &b = a;

其餘時使用都不合法!


by Keng-li.Lin

沒有留言:

張貼留言