![]() |
PCDVD數位科技討論區
(https://www.pcdvd.com.tw/index.php)
- 疑難雜症區
(https://www.pcdvd.com.tw/forumdisplay.php?f=34)
- - VC++的幾個問題part05..
(https://www.pcdvd.com.tw/showthread.php?t=257830)
|
|---|
引用:
------------------------------------------------------------------ 十分感謝大大您詳細的說明唷 每次都讓您打一大堆字真是不好意思 沒想到又是牽涉到計概的東西啊 1)照大大您舉的例子,是說因為在32 位元機器的 int 上是 4 bytes 而整數值是除存在1000~1003的位址 所以不管值宣告多少,只要是整數型態都是占用這4byte 應該是這個意思吧? 2)那麼"將10存到1000~1003位址的方式"是不是又是一門學問呢? 3)那麼這4byte到底最高極限能存取多大的值呢?有正負號之分嗎? 4)大大您覺得我有沒有必要先把VC++丟一邊,去惡補點計概的東西啊? |
引用:
------------------------------------------------------------------ 很感謝大大您參與討論唷 1)但是您這部份 char* p2="01234"; 小弟看不太懂唷 p2宣告為char型態的指標 但指標不是都儲存"值在記憶體的位置"嗎? 可以直接這樣指定值嗎? 2)還有您做了以下宣告 char* p2="01234"; 但又 cout<< p1[0] << " " << p2[0] <<endl; p2又沒被宣告為array 為何可以cout <<p2[0]? 請給小弟點意見,謝謝 |
1)只要你宣告了一個變數,那麼不管這個變數的內容為何,它所佔的記憶體位址是固定的!以 int 來說,不管你存入的值是 0 還是 65535,它都佔 4 (或著 2) bytes。
2)在例子中所提到的"1000~1003",只是我假設的一個位址。在程式執行時,所有的記憶體位址都是OS分配給你的!如果你想直接地、不經OS分配地寫資料到某個絕對位址,可能會覆蓋到其它程式的資料...也許是OS正在使用的記憶體,那就有可能造成系統,甚至硬體的毀損哦! 3)記憶體位址並沒有負的,所以32位元定址的系統最大可以存取到4294,967,296 bytes的記憶體。 4)我想這兩者可以是相輔相成的。不如你一邊學C/C++,一邊看計概。學習計概上的理論時,C/C++可以是你驗證的工具;學習C++時,計概就是你實作的基礎了! |
引用:
-------------------------------------------------------------------- 不好意思啦大大 小弟又有問題打擾您了 針對您上述的: 那如果值超過65535,那還會佔4 byte嗎? |
引用:
可以,這就是說 p2 是個指到char的pointer, 而在C語言裡字串就是char* (或是char[]), "01234"就是個字串。 引用:
這也就是我前面說的 「有時候pointer跟array是可以混著用, compiler會自動幫你處理好」 pointer跟array的關系可說是密不可分的。 |
引用:
---------------------------------------------------------------- 原來如此... 這點我的書上就沒有寫了 看來指標一時要理解真的是不太容易呢 感謝您給我這麼重要的意見唷 以後仍請大大不吝賜教 |
引用:
如果是 4 bytes 的int ,它的可以儲存的值從2147,483,647 ~ -2147,483,648。如果超過這個值,它會從頭算起。例如: int i = 2147483648; cout << i << endl; 因為你指派給 i 的值已經超出它可以容納的範圍,所以你會看到 i 的值從另一端算起。你可以自己更改指派給 i 的值觀察一下! 不過無論你指派給 i 多大的值,它還是佔 4 bytes。其它的型別也是一樣! |
引用:
-------------------------------------------------------------- 另一端...? 呵呵,小弟我真的越聽越給它模糊下去了 看來不能再撐了 我還是先去找本計概再來和大大您討論吧 感謝大大不厭其煩地講解唷 |
| 所有的時間均為GMT +8。 現在的時間是01:20 AM. |
vBulletin Version 3.0.1
powered_by_vbulletin 2026。