台灣真的是太多老師喜歡亂教了,
結果每年都有學生以為傳 pointer 就是 pass-by-address (即 pass-by-reference)。
後來發現初學者常搞不清楚的原因就是被那些星號給迷惑了,
所以把星號藏起來講就簡單了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#define GET_LVALUE(x) (&x) typedef int *MyType; void foo(MyType var) { } int main() { int var1 = 0; MyType var2 = GET_LVALUE(var1); foo(var2); } |
意思完全一樣,
只是換一種寫法而已。
會說這個不叫 pass-by-value 的人就減少了一大半,
如果我蓋掉最上面的 define 跟 typedef 那幾乎不會有人說 這是 pass-by-address 了。
所以結論就是一堆寫書的亂寫、教書的亂教,
不曉得這能不能當成商品重大瑕疵要求退書錢或學分費?
這麼多年看下來實在是有點火大。