以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  下面一段话看不懂  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=40703)


--  作者:sweetking
--  发布时间:11/30/2006 5:32:00 PM

--  下面一段话看不懂
inline void set_2d( folat *a, int m, int i, int j){
    a[i*m+j]=a[i*m+j]*a[i*m+j]+a[i*m+j]; // 哎呀!
}
可以将注释有"哎呀!"的那行代码替代为更简单的版本,该版本利用了引用,而且还带来额外的好处,那就是正确! (看出错在哪儿了吗?反正我第一眼没看出来。)
inline void set_2d(float *a, int m, int i, int j){
float &r=a[i*m+j];
r=r*r+r;
}

  请求解释  谢谢~


--  作者:卷积内核
--  发布时间:12/1/2006 11:01:00 AM

--  
给你举个相似的例子:
    i = 3;
    l = (++i);
    l = l + (++i);
    l = l + (++i);
    printf("%d %d\n",i,l);

    i = 3;
    m = (++i)+(++i)+(++i);
    printf("%d %d\n",i,m);
    return 0

结果是:
6 9
6 15
6 16

在vc和java编译下结果还会不同。

编译器无法保证(i++) 在自增之前被取值。


--  作者:lidongbin
--  发布时间:12/15/2006 10:12:00 PM

--  
你最好在编译环境里试一下
--  作者:一分之千
--  发布时间:1/1/2007 12:44:00 PM

--  
inline void set_2d(float *a, int m, int i, int j){
float &r=a[i*m+j];
r=r*r+r;
}
此处定义了一个内联函数(inline),该函数的意思就是把a数组的第i*m+j个元素的值平方(r*r)再加上本身(+r). 原函数直接使用了数组元素符号来进行运算,而新函数则是使用了一个float引用来进行运算..
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
1,484.375ms