# 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 的環境中,要達到一樣的效果,我們該如何改寫? ::: ---
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.