※ 引述《laiDark (Larry)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: 買書自修C++到現在
: 在學習指標方面有點苦手
: 遇到書上不懂 第一時間也會google看看不同的解釋
: 在動態記憶體配置上 書的內容是:
: 取得一塊記憶體空間給指標使用,讓指標所指的是自己的專用空間
: 這個時候我就很納悶 所以指標一開始是沒有佔有記憶體位址嗎?
no
: http://ppt.cc/mIQ3 http://ppt.cc/qRVJ
: 在這兩個網站上面,看到指標還是有自己的記憶體位址
: http://ppt.cc/4qlJ 在這邊理解動態記憶體配置
: 所以我是否能理解成 :
: 指標本身佔有記憶體位址,
: 若是要使指標能夠儲存資料(非記憶體位址)時,就需要動態記憶體配置
: 這樣的說法是否正確?? 有錯誤的地方拜託告訴我
not exactly
: 另外 在書上面看到op這個比較運算子
: 操作 功能 運算結果
: 位址op位址 求出二位址值的大小 假或真
: 但我在code block上面打op 只告訴我尚未宣告op..
: 我google也是查不到op的資料
: 讓我懷疑是否有這個比較運算子.....
沒看過。
記得很多書都是這樣寫的:
指標指向某一塊記憶體,指標的值為某一塊記憶體的位址。
於是乎下面這程式應該可以解你的惑:
http://ideone.com/e5rBng
#include <iostream>
using namespace std;
int main()
{
int i = 5;
int* p;
cout << "pointer p is " << *p << " at " << (void*)&p << " and size is "
<< sizeof(p) << endl;
p = new int;
//*p = 10;
cout << "pointer p is " << *p << " at " << (void*)&p << " and size is "
<< sizeof(p) << endl;
delete p;
p = &i;
cout << "pointer p is " << *p << " at " << (void*)&p << " and size is "
<< sizeof(p) << endl;
return 0;
}
其中有一些重點:
可以宣告一個指標不指向某一塊記憶體,於是乎他的值是垃圾值。
所謂動態new一塊記憶體意思就是要讓指標有個地方可以指向。
如果你不new,那就拿一個已經定義過的變數讓指標指向該變數的記憶體。
請記得一個觀念,
如果今天你是要有效運用指標做事情的話,他必須指向某一塊記憶體。
這一塊記憶體可以用new的,也可以是現成已定義過的。