变量使用之前要对其进行初始化。
char a --->1个字节
int b --->2个字节
float c --->4个字节
double d --->8个字节
double i=10.11 和 double i;i=10.11是等效的。
变量的两个属性:
存在性:它具有一个数据类型并以一定的方式存在于内存中。
可见性:在它的作用域中是可见的。
变量的存储类型有四种:
auto :重新访问值不发生变化,它是局部变量,每进入一次函数就初始化一次
{
auto int a //auto可以省略不写。
}
register,通过保留字register来完成,它的作用域是和auto一样的,变量保留在cpu的寄存器中,只是对编译程序的一种建议,而不是强制类型的,即可以由系统来调度。
这种变量无法求地址,他是一种宝贵的资源
static :可保存的,它的生命周期一直延迟到程序的结束。
局部变量不一定赋予初值,编译时对无值的赋予0(auto一定要有初值)
局部变量的作用域与auto,register相同
extern:在函数外部任意位置定义的全局变量
extern的作用域是全局的,在整个C文件中。位置从它被定义的位置开始。
它的生命周期是整个程序的运行期间。
当它和局部变量重名时就被局部变量屏蔽。如果需要就要加上extern保留字。
算术运算符号:+ - * /
他们的优先级别是-(负号) * / + -,它们可以用()调整
左结合原则。
模运算符号%
它的优先级和结合方向同* /相同
n%m的操作数均为整形数据。
余数的符号与被除数一致:
7%3=1
-2%3=-2
-3%-2=-1
-2%-3=-2
二元操作数据最好两侧一致。
赋值运算=
左操作数一定是变量,右侧可以为常量、变量和表达式。
类型与左端一致。
结合顺序是从右到左。算术运算符的优先级高于赋值运算符
++与- -
它是单目运算符号。它与变量结合。
但是如下的操作(i+j)++是错误的,因为不能返回值给指定的内存区域。
++a 与 a++和其他的语言一致。
如下例子:
i++*++i+i--*--i=?
int _tmain( int argc, _TCHAR * argv[])
{
int i = 3 ;
printf( " i=%d " ,(i ++*++ i + i --*-- i));
getchar();
return 0 ;
}
执行结果:
类型转化:
强制类型转化:
(类型)表达式
逗号表达式:
从左到右执行,
a=(表达式1....表达式n),a为最后一个表达式的值。
逗号表达式的优先级在所有的运算符中是最低的。