【问题标题】:How does for loop assignment work with the initializer variable in C?for 循环赋值如何与 C 中的初始化变量一起工作?
【发布时间】:2020-03-09 00:48:01
【问题描述】:

所以据我所知,任何被引用的东西都必须存储在内存中的某个地方。 存储在堆中的变量可以超过其函数调用后的生命周期。 但这里有一个在 for 循环中定义的整数的简单示例,它的值在某个点被它外部的数组引用。

如果我们打印出数组,我们会得到 0,1,2...7。 这些单独的整数存储在哪里?如果每个数组索引都在引用 相同的“int i”,那么它们都是相同的数字。但是如果每个 int 都是它自己的 单个内存单元,这是否意味着所有整数都在某个时候保存到内存中?

int main(){
    int arr[8];
    for (int i = 0; i<8; i++){
        arr[i] = i;
    }
    return 0;
}

【问题讨论】:

  • C 有值语义;赋值运算符意味着将右侧的值复制到左侧指示的内存位置。这不是建立某种公式或等价性

标签: c for-loop local allocation


【解决方案1】:

这些值存储在数组arr中。

int arr[8] 行中,您说的是“保留足够的内存来存储八个整数”。然后,当您进入循环时,您将循环计数器i 中的值分配到每个位置。在这个赋值操作之后,i 的值是什么并不重要,因为该值已经在 arr 数组中。在您发布的示例中,没有任何内容可以访问循环范围之外的值 i

【讨论】:

  • 好吧,我想我明白了。 int arr[8] 为 8 个整数保留内存。 arr[0] = 0 表示,将 0 的值复制到 arr[0] 所指向的保留内存空间中
  • 是的,这是正确的,等等所有后续循环迭代。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-02
  • 1970-01-01
  • 2011-04-02
  • 1970-01-01
  • 2011-01-19
  • 1970-01-01
相关资源
最近更新 更多