作者yauhh (哟)
看板Programming
标题Re: [请益] call by value, call ref, call by name
时间Sat Apr 3 10:05:04 2010
※ 引述《syura945 (○~)》之铭言:
: 用最笨的方法, 把程式展开就知道答案了
: // call by reference
: x=1; y=2; z=3;
: *&x=*&x+2; // x=x+2=1+2=3
: *&z=*&z+(*&x+*&y); // z=z+(x+y)=3+(3+2)=8 <- 考试答案
: // *&z=*&z+*((int) &x+&y); // z=z+(?) <- cpp 情况
: printf("%d,%d,%d\n",*&x,*&y,*&z); // 3,2,8
: printf("%d,%d,%d\n",x,y,z); // 3,2,8
Call-by-ref解释得更奇怪.
第二行程式本来是 z = z + y, y的呼叫参数是 x+y.
照理说是 *&z = *&z + *&y // y对应到呼叫参数 x+y
本来是 y 对应到 x+y, x+y 是一个不知名的暂时变数位置,
你怎麽直接把它变成 &y 对应到 &x+&y 呢?
一般的程式语言,你在函数中拿到一个 &y,
怎麽知道能展开成 &s+&t 而为什麽不是 &s*&t?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.112.228.65