标题:初学者,一个简单的问题,可是没搞明白
只看楼主
fangpopo520
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-11-18
结帖率:0
已结贴  问题点数:20 回复次数:8 
初学者,一个简单的问题,可是没搞明白
            string name;
            int tem = 10;
            if (tem == 10)
            {
                name = "Neusoft";
            }
            Console.WriteLine(name);

为什么name没被赋值呢?
2010-12-23 19:54
liubaoen
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:104
专家分:117
注 册:2006-6-12
得分:4 
不是没有被赋值,只是没有被初始化,在声明的同时赋给它一个初始值就可以了。
            string name = "";
            int tem = 10;
            if (tem == 10)
            {
                name = "Neusoft";
            }
            Console.WriteLine(name);

按照以上修改就可以了。
2010-12-23 20:13
fangpopo520
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-11-18
得分:0 
呵呵,确实
可是这样却也可以的

            string name;
                        
            name = "Neusoft";
            
            Console.WriteLine(name);
那么想
            string name;
            int tem = 10;
            if (tem == 10)
            {
                name = "Neusoft";
            }
            Console.WriteLine(name);
又为什么会错了

2010-12-23 20:48
zhoufeng1988
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:北京
等 级:贵宾
威 望:27
帖 子:1432
专家分:6329
注 册:2009-5-31
得分:4 
这个在C/C++是允许,但在.net里面,使用未初始化的变量编译器就会报错。
所以,在.net里,务必要对变量进行初始化,哪怕是使用null。


2010-12-23 21:43
c1_wangyf
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:7
帖 子:665
专家分:2832
注 册:2010-5-24
得分:4 
回复 3楼 fangpopo520
这是C#编译系统的默认,只定义不赋初值编译通不过?!
2010-12-23 21:46
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8074
专家分:6657
注 册:2005-11-7
得分:4 
4楼的解释并不完全正确
原因是这样的,报错的语句是Console.WriteLine(name);,报的错误是“使用了未赋值的局部变量”,因为程序在编译的时候,并不知道if语句是否一定能进入,所以name在编译器看来就有未赋值的情况,而string类型默认值是null,在Console.WriteLine的时候,null是无法使用的,所以出错。
代码我稍微修改了一下
        static void Main(string[] args)
        {
            string name;
            int tem = 10;
            if (tem == 10)
            {
                name = "Neusoft";
            }
            else
            {
                name = "";
            }
            Console.WriteLine(name);
        }
这样,同样没有赋初值,但就不会有问题了。

本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2010-12-23 23:40
zhoufeng1988
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:北京
等 级:贵宾
威 望:27
帖 子:1432
专家分:6329
注 册:2009-5-31
得分:0 
谢谢汁儿~原来女孩也睡这么晚啊,呵呵。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
受教了。只是一般写程序的时候,都会给一个初始值。
但有一点,如果这里改成int,也一样会出错,也是说没有初始值。感觉编译器并没有给
局部变量做初始化。如果string类型的初始值是null的话,就能编译通过。因为把一个字
符串复制给一个字符串变量,只是把传递引用而已。
2010-12-24 00:03
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8074
专家分:6657
注 册:2005-11-7
得分:0 
呵呵,看来是我弄错了点东西,抱歉,一个变量定义了,没有赋值,那么这个变量就没有内存地址,也就是说在内存中是不存在的,一个不存在的东西编译器会认为出错,而null实际上是内存的起始位置,也是有地址的。

本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2010-12-24 00:26
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2545
专家分:9359
注 册:2007-11-3
得分:4 
Neusoft? LZ是东软信息学院的?

出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2010-12-24 08:28



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-329732-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.107937 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved