我现在是恨C语言不规定表达式求值顺序了。。

cfvmario 2011-08-18 01:47:51
要依次算数组里相邻两数的差存入另一个数组
如果能写

for(i=0; i<n; i++)
{
b[i]=a[i]-a[++i];
}

多好。。咱知道不行,结果和编译器有关了。。
那么应该怎么实现更简洁高效呢。。
...全文
90 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljhhh0123 2011-08-18
  • 打赏
  • 举报
回复
清晰+正确才是最重要的。
把++去掉,在第二个语句中写++i;
你的实现已经很高效了。
机智的呆呆 2011-08-18
  • 打赏
  • 举报
回复
luciferisnotsatan 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cfvmario 的回复:]

引用 1 楼 fly55rain 的回复:
for (i = 0; i < n -1; i++)
{
b[i] = a[i] - a[i + 1];
}

这里不是每次都要算一次i+1么,有重复运算,觉得效率要受影响
[/Quote]
编译器会优化。
想要高效,可以自己做下循环式展开。
luciferisnotsatan 2011-08-18
  • 打赏
  • 举报
回复
pos=0;
for(i=0; i<n; i++,pos++)
{
b[i]=a[pos]-a[pos+1];
}

这样不就行了
wyfwx 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fly55rain 的回复:]
for (i = 0; i < n -1; i++)
{
b[i] = a[i] - a[i + 1];
}
[/Quote]

请相信编译器是比我们自己设计的软件高明的,它再产生汇编的时候会优化的。即使你写的代码能正确运行,也不见得就产生比这样写的优的汇编代码
quwei197874 2011-08-18
  • 打赏
  • 举报
回复
楼主想这样用就是用高级语言吧,python,perl什么的都行
Nosky100 2011-08-18
  • 打赏
  • 举报
回复
就算不跟编译器相关,你这个也不是相邻两数的差,而是一对一对数的差
{1,3,2,6,4,5}
你的结果是{-2,-4,-1},而不是{-2,1,-4,2,-1}。
cfvmario 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fly55rain 的回复:]
for (i = 0; i < n -1; i++)
{
b[i] = a[i] - a[i + 1];
}
[/Quote]
这里不是每次都要算一次i+1么,有重复运算,觉得效率要受影响
cfvmario 2011-08-18
  • 打赏
  • 举报
回复
额,上面代码错了。。

pos=0;
for(i=0; i<n; i++)
{
b[i]=a[pos]-a[++pos];
}

我只是想举个例子,实际这个a是以一维数组的形式表示的逻辑二维数组,所以遍历的时候其实是要用二重循环加pos的。现在要在行方向求每个元素和他右边的元素的差值
小木 2011-08-18
  • 打赏
  • 举报
回复
for (i = 0; i < n -1; i++)
{
b[i] = a[i] - a[i + 1];
}

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧