C# 变量(Variables)
变量是内存中供程序操作的堆栈区的名字。
在 C# 中,每个变量都有一个特定的类型,变量的类型决定了变量指向的存储区的大小和布局。针对变量的一些列操作,就是对相应存储区块的操作。
在上一章我们已经讨论了各种数据类型。C# 中提供的基本的值类型大致可以分为以下几类
类型 | 举例 |
---|---|
整数类型 | sbyte、byte、short、ushort、int、uint、long、ulong、char |
浮点型 | float 和 double |
十进制类型 | decimal |
布尔类型 | true 或 false 值,指定的值 |
空类型 | 可为空值的数据类型 |
C# 允许定义其他值类型的变量,比如 enum,也允许定义引用类型变量,比如 class。这些我们将在以后的章节中进行讨论。在本章节中,我们只研究基本变量类型。
C# 中的变量定义
C# 中变量定义的语法
<data_type> <variable_list>;
这里的 data_type 必须是一个有效的 C# 数据类型,可以是 char、int、float、double 或其他用户自定义的数据类型。variable_list 可以由一个或多个用逗号分隔的标识符名称组成。
一些有效的变量定义如下所示:
int name, age, year; char cs, ct; float fri, your_salary; double money;
您可以在变量定义时进行初始化:
int age = 27;
C# 中的变量初始化
变量通过在等号后跟一个常量表达式进行初始化(赋值)。变量初始化的语法如
variable_name = value;
例如
name = "简单教程"; money = 2.7;
变量可以在声明时被初始化(指定一个初始值)。初始化由一个等号后跟一个常量表达式组成,如下所示:
<data_type> <variable_name> = value;
下面的代码演示了变量如何在声明的同时初始化:
int age = 27, fm = 4; /* 初始化 age 和 fm. */ byte c = 29; /* 初始化 c. */ double pi = 3.1415926; /* 声明 pi 的近似值 */ char d = 'd'; /* 变量 d 的值为 'd' */
声明的同时赋予一个初始值是良好的编程习惯之一,不然程序运行时总会出现各种意想不到的错误(bug)。
变量的使用
我们先来看一段程序,使用了各种类型的变量
namespace VariableDefinition { class Program { static void Main(string[] args) { short year; int born ; double age; /* 实际初始化 */ year = 2017; born = 1986 age = year - born Console.WriteLine("year = {0}, born = {1}, age = {2}", year,born,age); Console.ReadLine(); } } }
当编译和执行上面的代码得到
year = 2017, born=1986, c = 31
读取用户输入的值
System 命名空间中的 Console 类提供的 ReadLine() 函数,能够读取用户的输入,并把它存储到一个变量中。
例如
int age; age = Convert.ToInt32(Console.ReadLine());
Console.ReadLine 读取的用户输入一般是字符串格式存储的,因此我们需要 函数 Convert.ToInt32() 把用户输入的数据转换为 int 数据类型,
C# 中的 左值(Lvalues) 和 右值(Rvalues)
C#中有两种表达式,左值表达式和右值表达式。
左值和右值一般是等号 (=) 分隔的,等号左边的叫左值, 等号右边的叫右值
1. lvalue :lvalue 又称左值, 左值表达式可以出现在赋值语句的左边或右边。
2. rvalue :rvalue 又称右值,右边表达式只可以出现在赋值语句的右边。
变量是 lvalue 的,所以可以出现在赋值语句的左边。数值是 rvalue 的,因此不能被赋值,不能出现在赋值语句的左边。下面是一个有效的语句:
int age = 27;
而另外的这些是一个无效的语句,会产生编译时错误:
27 = age;