黑马程序员--变量和表达式
1.变量:变量代表着一块内存空间,我们可以通过变量名称向内存存/取数据,有变量就不需要们记忆复杂的内存地址。
声明变量的语法格式:数据类型 变量名;
赋值:变量名=值;
常量:
语法: const 类型 常量名=常量值;
在定义时赋值,在其他地方不准改变他的值。
2.数据类型:数值:整型(int)、非整型(double(精度16位)、decimal[金钱类的](精度28或29位));
非数值(char[单个字符]、string[字符串])
Char : 单个字符用单引号,不能为空,可以是空格
String: 一串字符(0个或1个或多个字符)用双引号
注意:在C#开发环境中直接写个有小数点的数字,这个数字是double类型的
在小数后加“m/M”,表明其是decimal类型
变量声明的3种方法:
1) 先声明,再赋值;int a;a=3;
2) 定义变量时,直接赋值; int a=3;
3) 一次声明多个同类型变量,多个变量名称之间用逗号分隔
1 string zsName,lsName,wwName; 2 int i1 = 1, i2 = 2, i3 = 3;
变量一定要先声明,再赋值,在使用。
变量的命名规则:
1 必须以“字母”或下划线或@符号开头。(可以用中文,不建议用)【不能以数字开头】
2 后面可以跟任意的“字母”、数字、下划线。
注意:
1) 定义的变量名不要与C#系统中的关键字重复。
2) 在C#中,大小写是敏感的。
3) 同一个变量名不允许重复定义(先这样理解,不严谨)
定义变量时,变量名要有意义。
C#变量命名编码规范——Camel命名法:
首个单词的首字母小写,其余单词的首字母大写。
Pascal命名规范:每个单词第一字母都大写,如果使用到英文单词的缩写,全部用大写!
在方法中定义变量,要使用Camel命名法
表达式
表达式利用运算符和操作数来建立,其中运算符对操作数执行操作。运算符有3种:一元、二元和三元运算符,
它们分别操作1、2和3个操作数。数学运算符对数值执行操作,赋值运算符把表达式的结果放在变量中。
运算符有固定的优先级,优先级确定了运算符在表达式中的处理顺序。
赋值运算符:【=】;优先级最低
变量可以重复赋值,一旦给一个变量赋了新值,那么变量中的老值就不存在了
【“+”】号可以连接两个字符串,在C#中有两种意义:
1) +是数学中的加法运算
2) +是连接的意思。 判断时要看其两边的字符串的类型
占位符:{数字}表示,数字由0开始;占位符可以重复使用
Console.WriteLine();中有多个参数时,只输出第一个逗号之前的第一个参数,从第二个参数开始,都是用来替换第一个参数中的占位符的值,所以从第二个参数开始,要不要输出,就要看第一个参数中有没有相关的占位符。
在括号()中以“,”逗号分隔的不同元素称为参数;
转义字符“\”: 当我们需要在字符串中输入一些特殊字符时,比如:半角引号,换行、退格。就需要使用转义字符。
@在字符串前面表示字符串中的“\”不表示转义;另一种意思就是表示字符串可以换行 。
\n表示换行;\b表示退格;\t相当于Tab键(由多个空格组成的一个字符,具有行与行之间的对齐功能 );
如果字符串前面由@,在字符串中用两个“”表示一个“;
算术运算符:二元运算符【+、-、*、/、%】、一元运算符【++、--】;一般情况下,一元的比二元的优先级高;++和—都有前后之分;在表达式中前加和后加有区别,(前加时先自加后取值,后加时先取值后自加);
参与运算的两个操作数的类型必须相同,当不一致时满足以下条件发生自动转换(隐式转换):
1) 参与运算的两个数据类型必须相兼容
2) 必须一边的数据类型表示范围小,一边的表示范围大,并且把小的转向大的不丢失精度
凡是不丢失精度的转换程序才会自动转换,其他的需要显式转换
优先级:先乘除,后加减,右括号先算括号里的,相同级别的从左至右运算
小括号可以无限制的套用,但一定要成对出现
复合赋值运算符:【+=、-=、*=、/=、%=】;i=i+3;等效于i+=3(运算效率高);
强制类型转换语法:(数据类型名)待转换的数值
强制类型转换,数据类型一定要兼容
Convert不再仅是内存级别的转换,而是考虑数据意义的转换。Convert是一个加工、改造的过程。Convert.ToInt32(待转换字符串); Convert.ToString();
一切类型都可以转换成string类型
接下来介绍另外一些类型的变量:枚举、结构和数组
1.枚举:
让我们定义一种枚举类型并且在定义这种类型时我们要指定这个类型的所有值。
语法:
enum 自己起的类型名称{值1,值2,值36,……,值n};
枚举的定义,一般和类定义在同一个级别。这样,在同一个命名空间下的所有类就都可以使用这个枚举了。(方法中,类中都可以)
枚举的作用:1)限制用户不能随意赋值,只能在定义枚举时列举的值中选择。
2)不需要死记每一个值是什么,只需要选择相应的值。
注意:定义枚举的值时不能是int类型的。
枚举类型的变量都可以强制转换成一个int类型。
枚举的值在定义时是有一个默认编号的,从0开始
如何把一个字符串转换成枚举类型:(Gender)(Enum.Parse(typeof(Gender),”待转换的字符串 ”));
如果是让用户输入的值转换成枚举类型要用try-catch
2.结构:
为什么要用结构:1)当我们要存储一个人的信息,要声明一组变量。当我们要存储n个人的信息时,就要声明n组变量,太麻烦。 2)存储一个人的信息的这几个变量间没有关系,容易记乱
语法: 访问修饰符(public暂时) struct 结构名
{
定义结构成员;
}
定义好一个结构后,就可以直接声明相应的变量了。声明好变量后,通过“变量名.成员名”来访问结构的成员。
3.数组:数组可以帮我们一次声明多个同类型的变量,这些变量在内存中是连续存储的。
声明语法: 数据类型[] 数组名=new 数组类型[数组长度];
int[] score = new int[5]; //声明一个数组,里面包含5个int类型的变量(编号从0开始),数组名叫score,5个int变量是数组的元素。
如何访问数组:通过下标(索引)来访问数组; 数组名[编号](score[3])
int类型数组一旦声明,里面的每一个元素被初始化称0.
通过 “数组名.Length”可以表示数组的长度。
数组名前加“Params”,则数组长度可变。