【问题标题】:defining a var in loop [duplicate]在循环中定义一个var [重复]
【发布时间】:2020-05-10 08:57:16
【问题描述】:

在循环内部或外部定义 var 有什么区别? 例如:

int a;
for(int i=1; i<11; i++){
    a = rand()%10;
    printf("%d\n",a);
}

首先定义a,然后在循环中使用。 但在:

for(int i=1; i<11; i++){
    int a = rand()%10;
    printf("%d\n",a);
}

这里a 是在循环中定义的。 有什么区别,哪个更慢?

【问题讨论】:

  • 首先,循环后可以访问a;在第二个,你不能。否则,它们基本相同。当然,你也可以简单地去掉 a 并使用 printf("%d\n", rand() % 10); — 优化器可能会为你做这件事。
  • 首先构建启用优化的两个变体。然后查看两个示例的生成代码,看看是否有任何区别。如果有然后执行你的代码几百万次来衡量。最后想想你是否真的需要费心进行这种(可能的)微优化(一般的答案是)。
  • @Someprogrammerdude 你刚刚推荐一个新手检查优化的汇编代码来回答可变范围问题吗?
  • 建议(遵循规范用法):for (int i = 0; i &lt; 10; i++)
  • @JonathanLeffler 嗨,请告诉我在内存使用方面初始化变量的正确方法,我认为在 for 循环中初始化会再次创建并释放堆栈中的 int-memory与在循环外初始化变量相比,这将导致稍微多一点的时间。

标签: c for-loop var


【解决方案1】:

区别在于变量的范围。 a 在第一种情况下循环结束后存在,但在第二种情况下不存在。

【讨论】:

    猜你喜欢
    • 2021-01-05
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 2018-10-18
    • 2015-09-05
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多