# C Quiz 檢討 ###### tags: `learning` 從 GeeksForGeeks 看到的 [c quiz](https://www.geeksforgeeks.org/quiz-corner-gq/#C%20Programming%20Mock%20Tests) ,有些題目有助於釐清概念,就來做一下這樣... ## C 101 ### Q3   * 原先想法 最有問題的就是 ppInt ,因為 ppInt 保存的是 int * ,在上面的 code 中因為沒做初始化所以我想說這樣是不好的,就選了 runtime error * 解法 根據解法,上面寫說 ppInt 保存的是 int * ,所以可以 `free(*ppInt)` 這是沒問題的,從原理上來看,在沒有 free 後取出的情況下來說,的確裡面空間應該沒有放東西預設為 0 ,所以 free 掉也不會出問題才對 :::info 不過既然沒初始化過就不要 free 裡面的值阿... ::: ### Q8   * 原先想法 P1 我原先是想 `(*ptr)(3);` 這個 dereference 好像有點奇怪...,應該直接 `ptr(3) ` 就好了,不過我不確定 P2 的話我是看到 `void demo();` 出現在 main 裡面有點傻眼,如果是想先 declare 的話一般都是寫在檔案開頭的地方,第一次看到寫在 main ... * 解法 因為 P1 沒有在前面先 declare `void fun();` 而是在 main() 後面才 define ,故 compiler 不知道 fun 到底是指誰,會出現 compiler error P2 則是把 declare 寫在 main 裡面,雖然我沒見過,不過嘗試之後發現是合法的... ### Q9   * 原先想法 以為 for loop 會跳到 `i < 10` ,其實會跳到 i++ * 解法 for loop 會跳到 `i++` 而其他 do while 和 while 都會跳到判斷式,而 continue 位於 i++ 之前故會直接跳過 ## C 102 ### Q2  * 原先想法 以為 090, 00200, 0007000 都是十進制 * 解法 C 語言中用 0 開頭的都是 8 進制,所以 090 不合理 (8 進制 0~7 ),其他 00200 和 0007000 都是八進制印出 ### Q3  * 原先想法 我以為題目要我寫怎麼轉型成 float ,就很直覺的選了 A ...,後來才看到應該是說怎麼才能正確表達 constant 為 float data type 的意思 * 解法 若直接用小數為常數則預設會是 double 在常數後面加上 f 就可以轉為 float ### Q4  * 原先想法 我以為小數沒有 mod 這種運算 * 解法 發現有 fmod() 這種鬼東西 ==
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up