int n;
for(int i=0; i<5; i++)
 n = i;
Console.Writeline(n);请好心人帮助我解释两个非常基础的问题:
1.>变量n在for 循环中已经赋值了,为啥在进行输出时告知未被初始化?
2.>变量在使用前必须初始化, 这句话该如何理解?

解决方案 »

  1.   

    int n;
    for(int i=0; i<5; i++)
     n = i;
    Console.Writeline(n);-----》
    int n;
    for(int i=0; i<5; i++)
     {n = i;}
    Console.Writeline(n);n for 循环内部被初始化。
    出来for 还是没有初始化的
      

  2.   

    int n=0;
    for(int i=0; i<5; i++)
    {
     n = i;
    Console.Writeline(n);
    }
      

  3.   

    int n;
    for(int i=0; i<5; i++)
    {
     n = i;
    Console.Writeline(n);
    }
      

  4.   

    请问有经验的高手们:
    变量初始化需要考虑初始化的范围吗?
    比方像1楼高手所说,在for中进行了初始化,但是for结束后n依然没被初始化。
    谁能具体解释下。
    我太菜鸟了。
      

  5.   

    int n;                          //  你这必须给n个初始值 因为你在下面要 n=i 否则 会处错误
    for(int i=0; i<5; i++)              
     n = i;                                  
    Console.Writeline(n);for 赋给的值 不算是初始值   
    C#  你用的应该是VS  VS里运行应该有提示的这个
      

  6.   

    刚才我没太细看你的题  sorry   现在回答问题
    1. 你的 n 刚开始没有赋值  int n  这段 你得给他一个值
    2. 你 使 n=i  这就是使用n 这就是调用   所以在调用前必须赋初始值
      

  7.   

    int n =10;   //赋值   
      

  8.   

    晕。误人子弟。
    加上注释先
    //定义变量n
    int n;
    //循环5次,每次给n赋值为i
    for(int i=0; i<5; i++)
     n = i;
    //循环结束后打印n
    Console.WriteLine(n);从逻辑上,这个没有任何问题,但是编译器并没有那么智能,无法识别for中条件执行次数是否是0次,所以这里的赋值,在编译器是忽略的,而第一次是
    Console.WriteLine(n);
    使用的,在此之前忽略for中的赋值,就只有int n;这一句了。所以编译器认为,你使用了一个没有初始化的值类型变量。
      

  9.   

    14楼 说的挺明白了  编译器也不是想象的那么智能    要是你的for循环不执行呢   
    比如改成
    int n;//for 循环没执行
    for(int i=0; i>5; i++)

       n = i;
    }
    //这时候就读不出来 n的值了     所以要进行初始化
    Console.Writeline(n);
    这样for循环没执行  也就读不出n的值   虽然你写的for循环执行了  但是编译器可不知道.....
      

  10.   

    14L  说的很明白!!!
    UP!!
      

  11.   

    循环内的赋值,编译器不认为是赋值,因为可能循环内部代码没有被执行;另外一个例子,switch语句,在case中定义变量,编译时就会报错了。