# 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 的環境中,要達到一樣的效果,我們該如何改寫?
:::
---