【发布时间】:2015-01-05 16:20:07
【问题描述】:
我知道我们如何使用 memset 将数组的内容设置为特定值。现在,我对在给定范围内做同样的事情感兴趣。
scanf("%d %d",&a,&b);
//set the content from A[a] to A[b] as '0' without looping
我不想通过 for 循环。请告诉是否有其他有效的方法来实现这一点。
【问题讨论】:
-
我很确定
memset()的大多数版本都至少包含一个for循环。但是你尝试过什么吗?也许像memset(A + a, b - a, 0)这样的东西,但通过适当的检查来确保a和b实际上首先是数组中的有效索引? -
嗨!所以你的意思是无论我使用 memset 还是 for 循环,都是一样的?而你所说的,给出了垃圾输出。 ://
-
除了在 x86 等具有本机循环指令的平台上(由于迭代次数或其他指令集约束的限制,在某些情况下可能无论如何都不会使用),很可能一个正确构造的 @987654327与内联的
memset()调用相比,@loop 将生成几乎相同的指令。但是memset()对于那些必须在路上审查代码的人来说往往更清楚,编译器/库编写者应该为它提供尽可能接近最佳的代码,所以最好使用memset(),除非你有有充分的理由不这样做。 -
糟糕,我在原始评论中的参数乱了序,并且假设我们正在讨论字节数组 - 应该是
memset(A + a, 0, (b - a) * sizeof(A[0]))。
标签: memset