# 2018q1 第 5 週測驗題 (中) --- ### 測驗 `1` 已知在 x86_64 架構,以下程式碼的執行輸出是 `jserv++C`: ```clike #include <stdio.h> int main() { puts((char *) &(double []){ 3823806048287157.0, 96 }); } ``` 考慮以下程式碼,假設 puts 函式總是可正確運作,那麼程式輸出為何? ```clike #include <stdio.h> double m[] = { 3823806048287157.0, 96 }; void gen() { if (m[1]--) { m[0] *= 2; gen(); } else puts((char *) m); } int main() { gen(); return 0; } ``` ==作答區== * `(a)` jserv++A * `(b)` jserv++B * `(c)` jserv++C * `(d)` jserv++D * `(e)` jserv++E * `(f)` jserv++F * `(g)` jserv++G * `(h)` jserv++H * `(i)` jserv++I * `(j)` 沒有輸出 參考資訊: * [Compound Literals](https://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.html) :::success 延伸題目: 1. 修改程式,允許輸出你的 GitHub 帳號名稱 2. 承上,修改 gen() 函式,透過特定的轉換,讓 `m[]` 的內容變為你的英文姓氏 (last name),程式碼應該越短越好,而且不得以字串的形式存在於原始程式碼 3. 如果在 big-endian 的環境中,要達到一樣的效果,我們該如何改寫? ::: ---