gpt4 book ai didi

c - "for"循环中变量的范围

转载 作者:行者123 更新时间:2023-12-04 12:17:57 24 4
gpt4 key购买 nike

到目前为止我所知道的是,块内的多个声明会产生错误消息,并且未初始化的局部变量也会在打印时产生垃圾值。

但是遇到了一个 for 的例子C 中的循环动摇了我对变量范围的概念。

下面是相同的代码:

#include<stdio.h>

int main()
{
int i;
for(int i = 5; i > 0 ; i--){
int i;
printf("%d ", i);
}
}

上面的代码产生输出
0 0 0 0 0

我有两个问题
  • 一个 for循环被认为是一个块,那么如何为同一变量的两个声明分配两个不同的内存i ?如果for循环的第一行和它的主体被认为是两个块,那么如何识别不同的块?
  • 在循环体内部,变量 i未初始化,那么它如何将值设为 0,因为它应该具有垃圾值?

  • 请解释一下。

    最佳答案

    for 的第一部分中声明的变量的范围循环是 for 的所有三个部分加上循环体。在您的情况下,循环体是一个复合语句,您声明了另一个名为 i 的变量。在那个块中,所以它掩盖了 ifor 中声明.

    所以在你的一段代码中有三个相关的范围:

  • main的 body 功能
  • for的三部分环形。
  • for的 body 环形。

  • 并且它们中的每一个都是另一个的“内部”,因此在这些范围之一中声明的变量掩盖了更高范围中的同名变量。

    为了进一步说明这一点,如果我们修改您的代码如下:
    int main()
    {
    int i = 9;
    printf("outer i: %d\n", i);
    for(int i = 5;i>0;printf("middle i:%d\n", i),i--){
    int i = 7;
    printf("inner i: %d\n",i);
    }
    printf("outer i: %d\n", i);
    }

    输出是:

    outer i: 9
    inner i: 7
    middle i:5
    inner i: 7
    middle i:4
    inner i: 7
    middle i:3
    inner i: 7
    middle i:2
    inner i: 7
    middle i:1
    outer i: 9

    至于为什么你的代码在循环内打印 0,一个未初始化的变量可能有任何值,包括 0。所以仅仅因为它打印 0 并不意味着它不是垃圾。

    关于c - "for"循环中变量的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57126949/

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