我在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,查看更多内容
随时随地看视频慕课网APP