Re: [問題] 指標理解與op比較運算子

作者: bleed1979 (十三)   2014-09-08 14:57:01
※ 引述《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的,也可以是現成已定義過的。
作者: LPH66 (-6.2598534e+18f)   2014-09-08 15:00:00
補充一點: 如果要指標明確表示不指向任何東西那將它指向 0 或 nullptr 即可(用 0 有些地方要小心, 另外 NULL 跟 0 是一樣的)(不過大部份狀況用 0 並不會糟到哪裡去就是了)
作者: laiDark (煎餃加賴)   2014-09-08 19:39:00
謝謝!! 已經理解了~ (可是那段程式不能成功運行耶....

Links booklink

Contact Us: admin [ a t ] ucptt.com