剛剛看了一下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
沒有留言:
張貼留言