[問題] C語言觀念

看板C_and_CPP作者 (OGC一哥)時間12年前 (2012/05/05 09:13), 編輯推噓9(9036)
留言45則, 12人參與, 最新討論串1/1
問題(Question):有關C語言的敘述何者錯誤? (A)C函式的參數傳遞方式是傳值呼叫(call by value) (B)位址(Address)亦可傳入函式中 (C)C的函式中可呼叫其他函式 答案是C 想知道C不是只有主函式main可以呼叫負函式嗎? 因為自己目前寫過的書本例題都是由main呼叫副函式來使用 如果式副函式 可以呼叫其他的函式使用嗎? 有版友是跟我說C是正確的 我也被搞混了 PS.這是台電的考古題 --

05/17 01:36,
30公分以上即可
05/17 01:36

05/17 01:36,
你問五樓阿
05/17 01:36

05/17 01:37,
五樓自含結果嘴巴長菜花
05/17 01:37

05/17 01:37,
哈不到表示還不夠大
05/17 01:37

05/17 01:37,
5F吃到毛
05/17 01:37

-- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.60.112.186

05/05 09:26, , 1F
答案很明顯,可以呼叫其他副函式使用無誤.同時.在大多
05/05 09:26, 1F

05/05 09:27, , 2F
compiler下,main其實不是第一個進入函式,以這觀點看來的話
05/05 09:27, 2F

05/05 09:28, , 3F
main 本質上也是一個副函式,只是它幾乎是必呼叫的副函式.
05/05 09:28, 3F
※ 編輯: gauss760220 來自: 61.60.112.186 (05/05 09:39)

05/05 09:44, , 4F
你可以想像遞迴,自己呼叫自己,就是一個例子
05/05 09:44, 4F

05/05 09:45, , 5F
所以..這選擇題真的也很難選答案吧 ?
05/05 09:45, 5F

05/05 09:45, , 6F
傳遞方式有兩種,call by value、call by address
05/05 09:45, 6F

05/05 09:46, , 7F
A如果說只有,那就是a錯了
05/05 09:46, 7F

05/05 09:46, , 8F
我在懷疑,出題者是不是把 pass by pointer 當作是 call by
05/05 09:46, 8F

05/05 09:47, , 9F
value;pass by ref. 當作是 call by address. 是的話.答案
05/05 09:47, 9F

05/05 09:47, , 10F
是 (B), 因 C 語言沒有 reference 這東西。
05/05 09:47, 10F

05/05 09:51, , 11F
< 補一下,較多的說法是C語言 "只有" call by value. >
05/05 09:51, 11F

05/05 09:55, , 12F
C不是還有call by address,怎麼會說只有?
05/05 09:55, 12F

05/05 10:01, , 13F
這是兩派的看法。認為 pass by pointer 時,實際上存的是
05/05 10:01, 13F

05/05 10:03, , 14F
address "value", 存入的是一組位址的"數值",本質上還是
05/05 10:03, 14F

05/05 10:04, , 15F
call by value.而"call by addr."目前我沒在原文書看過,
05/05 10:04, 15F

05/05 10:05, , 16F
甚至懷疑這是不是台灣人給的名詞.好一點的書只會講 "傳遞
05/05 10:05, 16F

05/05 10:06, , 17F
指標",不會講"傳遞位址".
05/05 10:06, 17F

05/05 10:07, , 18F
< 所以才說這題真的難選 >
05/05 10:07, 18F

05/05 10:08, , 19F
再看其他版友有何見解吧。
05/05 10:08, 19F

05/05 10:25, , 20F
我覺得你的問題很大,怎會認為只有在 main 才能呼叫函數?
05/05 10:25, 20F

05/05 10:26, , 21F
至於考古題看看就好,資工研究所考試都會亂出一爛題目了
05/05 10:26, 21F

05/05 10:32, , 22F
看來台電這題,認為出不好的不只我一個..
05/05 10:32, 22F

05/05 10:36, , 23F
call by addr我是有看過有人會講call by pointer
05/05 10:36, 23F

05/05 10:36, , 24F
我是兩種都看過有人講,但我認為addr會比較好點
05/05 10:36, 24F

05/05 10:39, , 25F
居然找不到錯誤,看來我該重修了
05/05 10:39, 25F

05/05 10:42, , 26F
A的話,我會以為是Call by push
05/05 10:42, 26F

05/05 10:43, , 27F
fastcall by reg
05/05 10:43, 27F

05/05 11:20, , 28F
爛題目+1
05/05 11:20, 28F

05/05 11:37, , 29F
感覺都對阿= =
05/05 11:37, 29F
[部份違規推文已被系統自動刪除]

05/05 13:46, , 30F
函數只有call by value跟call by reference兩種
05/05 13:46, 30F

05/05 13:47, , 31F
C只是用了pointer來達到call by reference的效果
05/05 13:47, 31F

05/05 13:49, , 32F
本質上還是call by value 只是傳過去值是個位址而已
05/05 13:49, 32F

05/05 14:44, , 33F
推樓上zaqimon, 我覺得全對...
05/05 14:44, 33F

05/05 16:45, , 34F
小弟也覺得敘述全對沒一個可選; 另外C的確只有call by
05/05 16:45, 34F

05/05 16:46, , 35F
value; C++則是多了一個call by reference; call by
05/05 16:46, 35F

05/05 16:46, , 36F
address則是一個容易誤解也不怎麼正式的稱法, 最好避免
05/05 16:46, 36F

05/05 16:47, , 37F
使用. CbV與CbR, 小弟以為看參數傳遞時被推進stack的是
05/05 16:47, 37F

05/05 16:47, , 38F
參數的r-value或是l-value可以當作區分(印象中啦XD)
05/05 16:47, 38F

05/05 17:30, , 39F
全對吧
05/05 17:30, 39F

05/08 14:16, , 40F
當初台電考Fortran 以前Fortran不能call function
05/08 14:16, 40F

05/08 14:17, , 41F
現在變成把Fortran套在C身上= =
05/08 14:17, 41F

05/08 16:15, , 42F
答案不是一看就是C嗎... 我覺得超清楚的阿 甚至有點
05/08 16:15, 42F

05/08 16:15, , 43F
像送分題...
05/08 16:15, 43F

05/08 16:18, , 44F
眼殘... 我要說的是ABC都是對的
05/08 16:18, 44F

05/08 16:18, , 45F
c++才有call by reference
05/08 16:18, 45F
文章代碼(AID): #1Ff7ww2d (C_and_CPP)