推 johnpage: 1.遠程指標 12/02 18:20
→ johnpage: 2.bit的寫法,不足1byte,以1byte算 12/02 18:20
推 Killercat: 不是遠程指標 只是單純的long* 遠程指標是far 12/02 18:30
→ Killercat: 第一題我覺得你出去深呼吸兩下 喝個冰水回來就看懂了 12/02 18:31
→ Killercat: s是char* 硬轉成long*, +2代表移動兩個sizeof(long) 12/02 18:31
→ descent: c: 加整個 array size 12/02 18:32
→ Killercat: 最後再取值*(...) 這樣看懂了嗎? 12/02 18:33
→ Killercat: :1 :2有點太細,他是指定該變數吃幾個bit 12/02 18:34
→ Killercat: 以及怎麼排列,這個例子是POD,會按順序排列 12/02 18:34
→ caxz: 可是第一題*((long*)s+2) 的結果是14648 這又是為何? 12/02 19:42
→ dirkc: @caxz: 0x00003938 = 14648, 32位元long*等於4個byte, 所以 12/02 20:13
→ dirkc: *(long*)s=0x33323130, 0x30等於'0', 0x31等於'1',依此類推 12/02 20:14
→ dirkc: "0123"四個byte就變成0x30313233,little-endian就反過來 12/02 20:15
→ dirkc: 依此類推*((long*)s+2)指到最後"89\0",再多一個'\0'是湊巧 12/02 20:17
→ dirkc: 不過陣列宣告用堆疊記憶體,一般都會多配置空間,所以多'\0' 12/02 20:17
→ dirkc: 的湊巧幾乎總是會發生。 12/02 20:18
推 MIKEmike07: 哪間呀@@,不是頗簡單 12/02 20:46
→ dirkc: 另外一種想法是CPU賦值到記憶體還是以4或8bytes來對齊,所以 12/02 21:02
→ dirkc: 底層會多個'\0'是必然的。總之,大概是這些原因。 12/02 21:03
→ tsoahans: 3.指標加一是跳一整個a陣列的大小 前幾個禮拜版上有人問 12/02 21:58
→ ACMANIAC: 1.long size depends on system 12/02 23:08
→ ACMANIAC: 2.bit field 3.&a 的 type 是 int [5] 12/02 23:11
→ ACMANIAC: 講錯了,a 的 type 是 int[5] 所以 &a 是 int (*) [5] 12/02 23:19
→ ACMANIAC: 先讀熟 K&R 吧,還蠻基本的 12/02 23:21
推 littleshan: 第一題其實是 undefined behavior 12/03 01:39
→ Killercat: 因為endian的關係對吧,我之前漏了這點 XD 12/03 09:28
→ Killercat: 另外除了C出得還不錯以外 其他兩題都有點太魯小了 12/03 09:29
推 littleshan: 除了endian,直接cast指標可能違反alignment 12/03 12:42
→ dirkc: 有時候不大懂考偏冷寫法的考官動機是什麼 12/03 18:07
→ dirkc: 語法在那但是正常寫程式不會跟自己過不去 12/03 18:08
推 johnpage: 炫耀 12/04 05:34
→ johnpage: 只要能達到效果都是好程式,不需要寫成這樣 12/04 05:36
推 LPH66: 問題只在於有些寫法標準都告訴你不一定會達成效果 12/04 08:42
→ LPH66: 但一堆人還是寫的很高興... 12/04 08:42
→ wenyonba: C 的題目 int *p = *(&a+1) 是不是等於 int *p = a+1 12/04 17:54
推 purpose: 不是 12/04 18:05
→ Killercat: 要看a的type是什麼 12/04 18:11
→ Killercat: 精確地說 要看sizeof(a)是否等於sizeof(int) 12/04 18:12