【发布时间】:2015-07-09 08:39:45
【问题描述】:
我正在准备期末考试,并且正在学习一些优化技术。出于某种原因,关于这个特定示例的信息并不多,我也不明白,所以也许我可以得到一些帮助。
在 Powerpoint 幻灯片中,有这个强度降低的例子。
c1 = f();
for ( int i = 0; i < n; i++ ) {
c2 = c1 + g(i);
int ri = n * i;
for ( int j = 0; j < n; j++ )
a[ ri + j ] = c2 + h(j);
}
可以转化为
c1 = f();
*p = a;
for ( int i = 0; i < n; i++ ){
c2 = c1 + g(i);
for ( int j = 0; j < n; j++ )
*p++ = c2 + h(j);
}
这怎么是相同的代码?我不明白,因为增加一个指针只会将它向上移动一个元素,而对于每个 i 值,原始元素的移动量远远超过 1。是有什么错误还是我遗漏了什么?
【问题讨论】:
-
因为递增
*p相当于索引a[ri + j] -
这个想法是指针将继续前进,所以在一个 j 循环之后它将指向 a[n],在两个 a[2*n] 之后等。这就是为什么它不需要 ri在里面。
-
为了相同,你必须输入
p = a;而不是*p = a;,否则你会遇到麻烦。
标签: c loops optimization matrix iteration