Re: [問題] 面試題目 - pointer
※ 引述《k0783154 ( )》之銘言:
: 題目:
: 給記憶體位址 "0x123456789" 設定其值為0,請寫出其程式碼。
: 我是寫
: int *p;
: p = 0x123456789;
: *p = 0;
: 但是答案是給
: long *p;
: p = (long*)0x123456789;
: *p = 0;
我只是想引出更多高人對於這題目的看法和討論而已。
嚴格說起,要以指標存入 0x123456789,除非是 64 bits CPU 才可能,
以 sizeof(pointer) 而言,確實在 32bits cpu 下皆為 32bits,
64 bits cpu 下全為 64bits , 無誤,
但下面這段,你不能說它一定是 compile error , 或 runtime error
int *p2;
p2=(int*)0x0012ff601234;
printf("%p\n", p2);
重點在 assigned to p2 那裡,那部份還是要看 compiler 怎麼做,
它可以發出 warnning ,可以發出 error,也可以自己亂搞,
以手邊 32bits 環境, vc 2008 下,它給我的答案是 FF601234,
它只取最後 4 bytes 出來,但難保其它 compiler 也是以這種實做出現,
這部份我認為是在於 compiler 對於字面常量之解釋方式為何。
再回來看這段
long *p;
p = (long*)0x123456789;
*p = 0;
即使 你的 p 已順利 assig to 0x123456789,那又有個問題了 :
這台電腦作業系統,真的支援到單一程式可開 68 G(0x123456789) 記憶體嗎?
在做 assigned 動作時,其實一切都不會有任何問題 ,
即使它指向了一塊違規的記憶體空間,只要你不去讀它、不去寫它,
合理上它是可以這麼做的 (除非 compiler 擋掉),
一旦你開始去讀它或寫它,才會造成所謂的記憶體違規現象,
也即便是第三行的 *p=0 這才會造成違規現象。
嗯,再回到題意,上面都再扣除掉,
它是說寫入 0x123456789 這個位置,
如果是我的話,我不會用 long* , 不會用 int* , 而是用 char*
這樣就不會動到 0x12345678a、0x12345678b、0x12345678c 等位置,
而用 long* 、 int* 會寫到幾個 bytes,
這時必需看 sizeof(long)、sizeof(int) 實際上是幾個 bytes,
至於 sizeof(long) 和 sizeof(int) 到底多大?這是另一個議題,
可看相關系列文 #1DyEsSMY ,所有人的 Reply 都值得一看。
這題目,如同眾版友所言,不是個好題目。
--
YouLoveMe() ? LetItBe() : LetMeFree();
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.78.41
→
09/23 17:49, , 1F
09/23 17:49, 1F
→
09/23 17:49, , 2F
09/23 17:49, 2F
→
09/23 17:51, , 3F
09/23 17:51, 3F
→
09/23 17:53, , 4F
09/23 17:53, 4F
→
09/23 17:54, , 5F
09/23 17:54, 5F
→
09/23 19:24, , 6F
09/23 19:24, 6F
→
09/23 20:32, , 7F
09/23 20:32, 7F
→
09/23 20:32, , 8F
09/23 20:32, 8F
→
09/25 01:40, , 9F
09/25 01:40, 9F
→
09/25 01:42, , 10F
09/25 01:42, 10F
→
09/25 03:35, , 11F
09/25 03:35, 11F
→
09/25 03:35, , 12F
09/25 03:35, 12F
→
09/25 13:43, , 13F
09/25 13:43, 13F
→
09/25 13:44, , 14F
09/25 13:44, 14F
→
09/25 13:45, , 15F
09/25 13:45, 15F
→
09/25 13:46, , 16F
09/25 13:46, 16F
→
09/25 13:47, , 17F
09/25 13:47, 17F
→
09/25 14:40, , 18F
09/25 14:40, 18F
→
09/25 16:28, , 19F
09/25 16:28, 19F
→
09/25 16:29, , 20F
09/25 16:29, 20F
→
09/25 16:36, , 21F
09/25 16:36, 21F
→
09/25 16:45, , 22F
09/25 16:45, 22F
→
09/25 16:48, , 23F
09/25 16:48, 23F
推
09/25 20:36, , 24F
09/25 20:36, 24F
→
09/25 22:31, , 25F
09/25 22:31, 25F
→
09/25 22:35, , 26F
09/25 22:35, 26F
→
09/25 22:49, , 27F
09/25 22:49, 27F
→
09/25 23:08, , 28F
09/25 23:08, 28F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章
11
38