- 变量的初始化和赋值
程序中常需要对一些变量预先设置初值。C语言允许在定义变量的同时使变量初始化。
例如:int a = 3;(称为初始化);
而 int i ; i = 10 ;(称为赋值);
- 算术运算符和算术表达式
常见的运算符
运算符的运算存在优先级,优先级高的优先计算,自左向右;
“1+2”这样的称为表达式;
其中“+”属于运算符(operator)“1”、“2”属于运算中的操作数;
在需要两个操作数的运算表达式中,这样的运算符称为双目运算符;
注意:任何表达式都有数据类型,运行结果应该与定义的一致;
例如 %d\n就只能打印输出整型;
因此,编译器gcc只作为一种数据类型检查;
相关运算符的介绍
求余运算符: %
- 求余运算符%必须要求左右两边的运算操作数必须为整型或者可以与整型相兼容的数据类型;
- 求余运算表达式最终结果符号与左操作数有关,与右操作数无关;
- 求余运算表达式运算结果一定小于右操作数;
- 临时变量(匿名变量);
即在输出printf(“%d\n”, i + j);时计算机会临时取出一部分存储空间,其存储空间与操作数的存储空间类型一致,在运算后则会被立马回收回存储空间;
红色部分即为临时变量所在的模拟空间;
- 自减运算符和自加运算符(单目运算符);
++i ; i++其作用时使变量的值增加1
如果i的原值为3
则j = ++i ;(i的值先变成4,再赋值给j,j的值为4)
j = i++ ;(先将i的值3赋给j,j的值为3,然后原先i的值还为3,之后i的值变为4)
注意:i ++表达式加过了但是i并没有进行运算,i的值仍然为3;
++i 的效率大于i++;(i++新增了临时变量空间,而++i是在原有的i存储空间内进行加减);
- 对于左值、右值的判断与分析
通常情况下左值为变量,右值为常量;
Locatable (可定义的)也认为是lvalue(left value)左值;
Readable (可读的) 也认为是rvalue(right value)右值;
左值和右值的区分点为运算符;
- 混合运算
各类数值型数据间的混合运算
整型和浮点型可以混合运算,字符型数据可以与整型通用,因此,整型、浮点型、字符型、字符型数据间可以混合运算;
在进行运算时,不同类型的数据要先转换为同一类型,然后进行运算,。转化的规则如下
2
这种方式在C语言设计中被称为是隐式转换;
其还有显式转换;
例如:(类型)强制类型转换运算符就属于显式转换;
- 混合赋值
首先,赋值运算符的本质是内存的拷贝;
i = j ;即为在i 与j数据类型一致的情况下,直接把j的内存拷贝给i;
一些常见的混合赋值类型:
int = double (小数部分截断)
short = int (只拷贝低位字节,称为高位截断)
int = short (等符号位扩展)
注意:一般,在long = short 时,只用考虑给long型的空间补位即可,signed short只用补其符号位 ;unsigned short 只用补0;
- 逗号运算符和逗号表达式
逗号表达式的一般形式为
表达式1,表达式2
逗号表达式的求解过程是:先求表达式1,再求表达式2。整个逗号表达式的值为表达式2的值。
逗号运算符也常称为顺序求职运算符;
例如:在printf(“%d\n”,1 + 2, 3 * 8, 7 - 2);此时逗号为函数实参分隔符;
()表示函数调用运算符。
- 总结
要深刻理解变量被计算机存储到内存的抽象到具体的方式,这样才能更加深刻的理解C语言在编译和运行过程;只有把这种思路深刻化才能在进行混合运算和混合赋值过程中减少错误的发生。