我在for循环语句给变量S赋值,但程序报错:使用了未赋值的局部变量“s”,希望老师们指导
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace 数组的排序练习
7 {
8 class Program
9 {
10 static void Main(string[] args)
11 {
12 string[] names = { "梅西", "卡卡", "郑大世" };
13 string s;
14 //在for循环语句不是个s赋值了,怎么还是报错“局部变量S未赋值”
15 for (int i = 0; i < names.Length-2; )
16 {
17 s=names[i]+"|";
18 Console.Write(s);
19 i++;
20 }
21 s=s+names[names.Length-1];
22 Console.WriteLine(s);
23
24 Console.ReadKey();
25 }
26 }
27 }
程序报错:使用了未赋值的局部变量“s”(即代码中的红色s),可是我不是在for语句中,已经赋值初始化了吗?
希望各位老师们,指导学生,指点迷津
holdtom
浏览 809回答 19
19回答
-
慕妹3242003
你的代码不能通过 VS 的编译,起码要赋空值。
-
尚方宝剑之说
我知道将string s="";程序可以编译通过,但是我在for语句赋值也行啊,怎么就不可以呢?是我在知识点上有误区吗?我想知道为什么
-
慕森卡
其实我也有这样想法:【在程序买没有执行之前,是不能确定for循环里的内的东西用一定能执行】
但是后来想想,程序在编译时是从上到下顺序编译的,
当编译器读取到【s=s+names[names.Length-1]】这句时,早就通过了for循环,知道肯定能通过for语句给变量s赋值,在需要使用变量s时,都对变量S进行赋值初始化了。
-
MMMHUHU
@黑夜猫头鹰:
1、我也认为是编译器不会识别for内部赋值语句,就像if……else……中赋值一样。
2、编译器也并不一定从上到下,会有编译优化
3、编译器编译的时候也不会去执行你的代码,只是进行类型安全检查,访问权限之类的检查和其他。
-
杨魅力
你至少得初始化啊,都没有分配内存空间,怎么去对变量进行操作
-
汪汪一只猫
这一句,不是【 s=names[i]+"|"】不是赋值初始化了吗?
-
有只小跳蛙
@黑夜猫头鹰: 变量定义的时候就要分配内存的
-
慕沐林林
@飘雪无痕007: 我只听过”变量在使用前要赋值初始化“,没有这”定义是就要分配内存地址“???
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace ConsoleApplication4
7 {
8 class Program
9 {
10 static void Main(string[] args)
11 {
12 string a;
13 string b = Console.ReadLine();
14 a = b;
15 Console.WriteLine(a);
16 }
17 }
18 }
照你的说法,呢么怎么变量a又可以运行呢??
-
精慕HU
其实我也有这样想法:【在程序买没有执行之前,是不能确定for循环里的内的东西用一定能执行】
但是后来想想,程序在编译时是从上到下顺序编译的,
当编译器读取到【s=s+names[names.Length-1]】这句时,早就通过了for循环,知道肯定能通过for语句给变量s赋值,在需要使用变量s时,都对变量S进行赋值初始化了。
-
aluckdog
@黑夜猫头鹰: 都说了,编译器是无法判断你的for语句能否跑完的。
打开App,查看更多内容