Linux C 编程学习第二天

常量

常量(Constant)是程序中最基本的元素,有字符常量、整数常量、浮点数常量和枚举常量。

字符常量要用单引号括起来,例如:   '}'        注意单引号只能扩一个字符,而不能想双引号那样扩一串字符,接下来做个简单的测试:

 

 编译运行的结果是:

 字符常量也可以是一个转义序列,例如:     '\n'        虽然这个单引号扩了两个字符但实际上只表示一个字符,和自负床字面值使用转义序列有一点区别,如果在字符常量中要表示双引号"和?可以使用转义序列   \"   和   \?   也可以直接使用字符   "    和   ?   ,而要表示  '   和   \    则必须使用转义序列

变量

常量有不同类型,变量也是如此,他们的类型决定了所占用存储空间的大小

分别由:整型、字符型、浮点型,浮点有三种,float   double   long double     

变量取名必须以字母或者下划线开始,后面可以根若干字符、数字、下划线、但是不能有其他字符,命名不能使用关键字,通常编辑器会对关键字进行高亮度显示,C99规定的关键字有:

 

 一般来说避免使用以下划线开头的标识符,防止命名冲突

 

赋值

定义了变量之后,用赋值语句将值存在它们所表示的存储空间里

注意变量一定要先声明后使用

变量的定义和赋值可以一步完成,这称之为变量的初始化(Initialization)

在初始化语句中,等号右边的值叫做Initializer,初始值,初始化是一种特殊的变量定义语句,不是一种赋值语句。

char letter;

int hour;

hour = 11;

letter = 'a';

以上代码等同于:

char letter = 'a';

int hour = 11;

 

表达式

+ - * / 称之为运算符,参与运算的常量和变量称之为 操作数,hour + 1 这样的算式称为表达式

运算符是具有优先级的

printf();   函数可以直接输出复杂的表达式的值

表达式是可以组合的,理解组合式理解语法规则的关键所在,但是表达式不易过度组合,否则程序会失去可读性。

例如:

printf("num1 = %d\n num2 = %d\n num3 = %d\n", num1 ,num2, (num1 \ num2 + num2 * num1)+num1);

注意,根据语法规则组合出来的表达式在语义上并不总是正确的,例如:

minute + 1 = hour

等号左边的表达式要求表示一个存储位置而不是一个值,有的表达式既可以表达一个存储位置也可以表达一个值,而有的表达式只能表示值,不能表达存储位置,上述便是语义错误,表达式所存储位置称为左值 (lvalue) 允许放在等号左边,而表达式的值称为右值 (rvalue) 只能放在等号右边,简单点说:有的表达式有左值也有右值,有的表达式只有右值。

看到一个很有意思的例子说明了上述问题:

定义int a, b, c;   a = b = c;这个式子就是合法的,但是 (a = b) = c; 就是不合法的,前者是先求b = c,然后a = b; 而后者则是先进行 a = b;是对的,但是(a = b)这个实自不能作左值了,所以放在一起 (a = b) = c  就是不合法的。

除法运算有些许特殊,由于变量和常量是有类型的,所以在进行除法运算的时候会有误差

 

 这种做法是对的,但是由于hour  和  minute 是  int 型,所以会造成小数部分丢失,结果为0

若将这两个变量定义为浮点型,就会有小数输出,但是我们还有另外一种做法:

printf(" %d  and  %f   hours\n ", hour, minute / 60.0);

60.0是double型的,在进行除法运算的时候,C语言会将 minute 转换称为 double 型进行运算

字符类型和字符编码

符号在计算机内部也使用数字表示,每个字符在计算机内部用一个整数表示,称为字符编码,目前最常用的是 ASCII 码

有一点需要说明,之前我们知道整型是指 int 型,而现在又知道了 char 型本质上就是整数,只不过取值范围比 int 小,所以 char 和 int 统称为整数类型,另外最有趣的一点就是:

字符(注意是字符)'a' 到 'z'、'A' 到 'Z'、'0' 到 '9'  的ASCII码都是连续的,因此表达式 'a' + 25和 'z' 的值是一样的,需要注意的是 '0' 到 '9'  的ASCII码是16进制的30~39,这和整数值 0~9 是不一样的,千万别将这两者混淆。

 

posted @ 2021-04-28 16:26  哿与银冰  阅读(67)  评论(0)    收藏  举报