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语句中,已经赋值初始化了吗?
希望各位老师们,指导学生,指点迷津
19 回答
慕森卡
TA贡献1806条经验 获得超8个赞
其实我也有这样想法:【在程序买没有执行之前,是不能确定for循环里的内的东西用一定能执行】
但是后来想想,程序在编译时是从上到下顺序编译的,
当编译器读取到【s=s+names[names.Length-1]】这句时,早就通过了for循环,知道肯定能通过for语句给变量s赋值,在需要使用变量s时,都对变量S进行赋值初始化了。
MMMHUHU
TA贡献1834条经验 获得超8个赞
@黑夜猫头鹰:
1、我也认为是编译器不会识别for内部赋值语句,就像if……else……中赋值一样。
2、编译器也并不一定从上到下,会有编译优化
3、编译器编译的时候也不会去执行你的代码,只是进行类型安全检查,访问权限之类的检查和其他。
慕沐林林
TA贡献2016条经验 获得超9个赞
@飘雪无痕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
TA贡献1845条经验 获得超8个赞
其实我也有这样想法:【在程序买没有执行之前,是不能确定for循环里的内的东西用一定能执行】
但是后来想想,程序在编译时是从上到下顺序编译的,
当编译器读取到【s=s+names[names.Length-1]】这句时,早就通过了for循环,知道肯定能通过for语句给变量s赋值,在需要使用变量s时,都对变量S进行赋值初始化了。
HUH函数
TA贡献1836条经验 获得超4个赞
@黑夜猫头鹰: 编译器不会运行你的程序,它只会做一些语法上的检查。但是你这里把s用于赋给一个变量,而编译器检测到你的s只有声明没有值,因此认为这个语句不符合语法于是报错。编译器并不会跑你的程序来确定for循环会不会运行
至尊宝的传说
TA贡献1789条经验 获得超10个赞
其实我也有这样想法:【在程序买没有执行之前,是不能确定for循环里的内的东西用一定能执行】
但是后来想想,程序在编译时是从上到下顺序编译的,
当编译器读取到【s=s+names[names.Length-1]】这句时,早就通过了for循环,因为【string[] names = { "梅西", "卡卡", "郑大世" }】,则编译器通过判断,肯定能通过for语句给变量s赋值,在需要使用变量s时,都对变量S进行赋值初始化了
- 19 回答
- 0 关注
- 803 浏览
添加回答
举报
0/150
提交
取消