gpt4 book ai didi

c - 使用 sizeof、strlen 等重复计算

转载 作者:行者123 更新时间:2023-12-04 08:10:47 25 4
gpt4 key购买 nike

假设我有一个大数组,我正在做如下事情:

for (int i = 0; i < sizeof(arr)/sizeof(arr[0]); ++i)
printf("arr[%d]=%d\n", i, arr[i]);
当然, sizeof不应该每次都计算东西,所以它应该是这样的:
size_t len = sizeof(arr)/sizeof(arr[0]);
for (int i = 0; i < len; ++i)
printf("arr[%d]=%d\n", i, arr[i]);
我的问题是是否可以假设任何编译器都会自动进行上述优化,因此我使用哪种方法并不重要?或者我应该假设情况并非如此,第二种方法是唯一正确的方法。

最佳答案

没有理由将除法提升到循环条件之外。这甚至不是计算除法次数的问题(这是在这些情况下通常关心的问题,并且可能需要编译器使用“转义分析”来确定长度值是否可以在迭代之间改变)。简单的事实是sizeof(arr)/sizeof(arr[0])是一个常量表达式,它将在编译时进行计算,与在那里硬编码一个数字没有什么不同。

关于c - 使用 sizeof、strlen 等重复计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65976323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com