为了账号安全,请及时绑定邮箱和手机立即绑定

我在for循环语句给变量S赋值,但程序报错:使用了未赋值的局部变量“s”,希望老师们指导

我在for循环语句给变量S赋值,但程序报错:使用了未赋值的局部变量“s”,希望老师们指导

holdtom 2018-12-06 20:26:20
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 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

你的代码不能通过 VS 的编译,起码要赋空值。
查看完整回答
反对 回复 2018-12-09
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

我知道将string s="";程序可以编译通过,但是我在for语句赋值也行啊,怎么就不可以呢?是我在知识点上有误区吗?我想知道为什么
查看完整回答
反对 回复 2018-12-09
?
慕森卡

TA贡献1806条经验 获得超8个赞

其实我也有这样想法:【在程序买没有执行之前,是不能确定for循环里的内的东西用一定能执行】 但是后来想想,程序在编译时是从上到下顺序编译的, 当编译器读取到【s=s+names[names.Length-1]】这句时,早就通过了for循环,知道肯定能通过for语句给变量s赋值,在需要使用变量s时,都对变量S进行赋值初始化了。
查看完整回答
反对 回复 2018-12-09
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

@黑夜猫头鹰: 1、我也认为是编译器不会识别for内部赋值语句,就像if……else……中赋值一样。 2、编译器也并不一定从上到下,会有编译优化 3、编译器编译的时候也不会去执行你的代码,只是进行类型安全检查,访问权限之类的检查和其他。
查看完整回答
反对 回复 2018-12-09
?
杨魅力

TA贡献1811条经验 获得超6个赞

你至少得初始化啊,都没有分配内存空间,怎么去对变量进行操作
查看完整回答
反对 回复 2018-12-09
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

这一句,不是【 s=names[i]+"|"】不是赋值初始化了吗?
查看完整回答
反对 回复 2018-12-09
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

@黑夜猫头鹰: 变量定义的时候就要分配内存的
查看完整回答
反对 回复 2018-12-09
?
慕沐林林

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又可以运行呢??
查看完整回答
反对 回复 2018-12-09
?
精慕HU

TA贡献1845条经验 获得超8个赞

其实我也有这样想法:【在程序买没有执行之前,是不能确定for循环里的内的东西用一定能执行】 但是后来想想,程序在编译时是从上到下顺序编译的, 当编译器读取到【s=s+names[names.Length-1]】这句时,早就通过了for循环,知道肯定能通过for语句给变量s赋值,在需要使用变量s时,都对变量S进行赋值初始化了。
查看完整回答
反对 回复 2018-12-09
?
aluckdog

TA贡献1847条经验 获得超7个赞

@黑夜猫头鹰: 都说了,编译器是无法判断你的for语句能否跑完的。
查看完整回答
反对 回复 2018-12-09
?
HUH函数

TA贡献1836条经验 获得超4个赞

@黑夜猫头鹰: 编译器不会运行你的程序,它只会做一些语法上的检查。但是你这里把s用于赋给一个变量,而编译器检测到你的s只有声明没有值,因此认为这个语句不符合语法于是报错。编译器并不会跑你的程序来确定for循环会不会运行
查看完整回答
反对 回复 2018-12-09
?
阿晨1998

TA贡献2037条经验 获得超6个赞

定义成静态变量,每次跳出循环s为空的缘故
查看完整回答
反对 回复 2018-12-09
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

其实我也有这样想法:【在程序买没有执行之前,是不能确定for循环里的内的东西用一定能执行】 但是后来想想,程序在编译时是从上到下顺序编译的, 当编译器读取到【s=s+names[names.Length-1]】这句时,早就通过了for循环,因为【string[] names = { "梅西", "卡卡", "郑大世" }】,则编译器通过判断,肯定能通过for语句给变量s赋值,在需要使用变量s时,都对变量S进行赋值初始化了
查看完整回答
反对 回复 2018-12-09
  • 19 回答
  • 0 关注
  • 803 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信