推 jaw109:有夠詳細,給你個推 XD 04/05 18:55
→ slalala:p指向某變數「f」內容數字的記憶體位置!? 04/05 19:14
→ shimii:寫的好詳細 完全董了:) 謝謝 04/05 19:18
→ shimii:p才是變數@@ 講顛倒了 04/05 19:19
推 slalala:P不是變數 *p指標吧?! f才變數?! 這段連結原po寫在函式?! 04/05 19:28
→ shimii:我只知道*p是指標變數..要在一開始宣告 orz 04/05 19:37
char* p是一個指標,我們假設f是char。
程式片段如下
char f = 'X';
char* p = f;
還沒進入程式前:
名稱 型態 值 位置
f char 未初始 未初始
p char* 未初始 未初始
跑到char f = 'X'; //PS, 「0x」開頭的數字是指十六進位
名稱 型態 值 位置
f char 'X'(0x58) 0xA001 //位置可能每次不同
p char* 未初始 未初始
跑到char p = f;
//要說一下,通常到這邊是不會允許的,compiler應該會說
//"Can not convert char to char*"之類的訊息,這是好事,
//如果compiler讓你這樣作,在使用*p時會用到不屬於你程式
//的資料,通常會有「本程式發生錯誤即將關閉」,倒霉一點
//就是程式安靜的取用到不屬於他的資料,然後你會發現你的
//程式行為莫名奇妙,然後debug一兩個小時才發現你犯了個愚
//蠢的錯誤
名稱 型態 值 位置
f char 'X'(0x58) 0xA001
p char* 0x0058 0xA002 //位置每次都可能不同
正常的情況應該是這樣
char f = 'X';
char* p = &f; //注意那個&
還沒進入程式前:
名稱 型態 值 位置
f char 未初始 未初始
p char* 未初始 未初始
跑到char f = 'X'; //PS, 「0x」開頭的數字是指十六進位
名稱 型態 值 位置
f char 'X'(0x58) 0xA001 //位置可能每次不同
p char* 未初始 未初始
跑到char p = &f;
名稱 型態 值 位置
f char 'X'(0x58) 0xA001 //位置可能每次不同
p char* 0xA001 0xA002
^^^^^^^
※ 編輯: doomleika 來自: 210.209.189.4 (04/05 20:02)
推 doomleika:這樣講可能不容易理解,想要live與程式記憶體SNG 04/05 20:05
→ doomleika:請開你的debugger(除錯器)撿查 04/05 20:06
推 slalala:對嘛~所以我會以為這段程式碼在函式裡面~ 04/05 20:14
→ slalala:簡單說就是把f='X'的f的記憶體位置複製給p 04/05 20:15
→ doomleika:no, 原po的那個意思我想是把ASCII碼當成記憶體存進去 04/05 20:22
推 slalala:所以方法幾乎錯了?? 指標有時候很難懂/ \ 04/05 20:23
推 shimii:所以關鍵是那個&就是了@@ 又上了一課!謝拉~XD 04/05 20:25
推 slalala:建議先知道&的意思喔 04/05 20:29
→ PsMonkey:推內容也順便推簽名檔 04/05 21:49
推 compound:推一下~ :) 04/06 16:32