目录
1、变量
1.1、变量的基础
变量在程序中用变量名表示。变量名由用户根据其用途任意命名。
变量名由字母、数字、下划线组成,不能以数字开头,不能和C的关键字重名。
在程序运行时,变量占据存储空间的大小由其数据类型决定。
变量在内存空间中的首地址,称为变量的地址。
1.2、变量的说明
变量在程序中使用时,必须预先说明它们的存储类型和数据类型。
变量说明的一般形式是:
<存储类型> <数据类型 > <变量名> ;
<存储类型>是关键词auto、register、static和extern
<数据类型>可以是基本数据类型,也可以是自定义的数据类型
1.3、变量的存储类型
1、auto
auto说明的变量只能在某个程序范围内使用,通常在函数体内或函数中的复合语句里。(默认是随机值)——局部变量
在函数体的某程序段内说明auto存储类型的变量时可以省略关键字auto,如下:
auto int k ;
int j ;
double x;
2、register
register称为寄存器型,register变量是想将变量放入CPU的寄存器中,这样可以加快程序的运行速度。
如申请不到就使用一般内存,同auto ;
register变量必须是能被CPU所接受的类型。这通常意味着register变量必须是一个单个的值,并且长度应该小于或者等于整型的长度。
不能用“&”来获取register变量的地址。
由于寄存器的数量有限,真正起作用的register修饰符的数目和类型都依赖于运行程序的机器。
在某些情况下,把变量保存在寄存器中反而会降低程序的运行速度。因为被占用的寄存器不能再用于其它目的;或者变量被使用的次数不够多,不足以装入和存储变量所带来的额外开销。
3、static
static变量称为静态存储类型的变量,既可以在函数体内,也可在函数体外说明。(默认是0)
局部变量使用static修饰,有以下特点:
在内存中以固定地址存放的,而不是以堆栈方式存放
只要程序没结束,就不会随着说明它的程序段的结束而消失,它下次再调用该函数,该存储类型的变量不再重新说明,而且还保留上次调用存入的数值。
当变量在一个文件中的函数体外说明,所有其他文件中的函数或程序段都可引用这个变量。
4.extern
extern称为外部参照引用型,使用extern说明的变量是想引用在其它文件中函数体外部说明的变量。
static修饰的全局变量,其它文件无法使用
Es:
思考与总结
思考:
C语言中,变量的存储类型有哪些?
答:auto、register、static、extern
修饰局部变量时,auto和static有什么区别?
答:auto:修饰局部变量默认值是随机的,变量在某个程序范围内使用,由内存创建和回收
static:修饰局部变量默认值是0,变量随着程序而存在,程序结束变量随之销毁
2、运算符
2.1、算术运算符
例如,
int a=15, b=8,c;
double x=15, y=8, z;
c = a + b ; c = a – b; c = a * b; c = a / b; // c 赋值为
c = a % b; // c 赋值为
z = x + y ; //z 赋值为
z = x - y; // z 赋值为
z = x * y ; // z 赋值为
z = x / y ; // z 赋值为
z = x % y ;
2.2、关系运算符
例如,
int a=5, b=6;
a>(b-1) 结果值为0
(a +1)== b 结果值为1
a>=(b-2) 结果值为1
a<100 结果值为1
(a+3)<=b 结果值为0
a != (b-1) 结果值为0
2.3、逻辑运算符
例如,
int k=8;
! ( k ==0) 结果值为1
! ((k-8) == 0) 结果值为0
! (k<= 0) 结果值为1
例如
int x=5, y=18;
(x>=5) && (y<20) 结果值为1
((x+1)>=0) && (y<17) 结果值为0
((x-8)>=0) && (y==18) 结果值为0
((x-5)>0) && (y!=18) 结果值为0
((x>=5)) || (y<20) 结果值为1
((x+1)>=0) || (y<17) 结果值为1
((x-8)>=0) || (y==18) 结果值为1
((x-5)>0) || (y!=8) 结果值为1
2.4、位运算符
例如:
unsigned char x=0x17, y;
y = ~x;
位移位运算的一般形式:
<运算量> <运算符> <表达式>
其中:
<运算量> 必须为整型结果数值;
<运算符>为左移位(<<)或 右移位(>>)运算符;
<表达式> 也必须为整型结果数值。
如何利用位运算把一个十进制数转化成一个十六进制数?
2.5、赋值运算符
赋值运算符为“=”,其运算的一般形式如下:
<左值表达式> = <右值表达式>
赋值复合运算符其运算的一般形式如下:
<变量> <操作符>= <表达式>
赋值复合运算符
案例:
#include <stdio.h>
int main(int argc, char **argv)
{
int count, sum;
count = 0; sum = 0;
while (count++ < 20) { sum +=count; }
printf("sum = %d\n", sum);
return 0;
}
2.6、特殊运算符
1、条件运算符"? :"
是三目运算符, 其运算的一般形式是:
<表达式1> ? <表达式2> : <表达式3>
例如:
int x=82, y=101;
x >= y ? x+18 : y-100 //运算结果为1
x < (y-11) ? x-22 : y-1 //运算结果为60
案例:
int main()
{ int x, y=25;
x=70;
y= x++ > 70 ? 100 : 0 ;
printf(“x=%d y=%d”, x, y);
return 0;
}
运行结果: x=71 y=0↙
2、逗号运算符
float x=10.5, y=1.8, z=0;
z = (x+=5, y = x+0.2) ;
z = (x=y=5, x +=1) ;
z = (x=5, y=6, x+y ) ;
z = (z=8, x=5, y=3) ;
3、sizeof运算符
运算的一般形式:sizeof(<类型或变量名>)
注意:它只针对数据类型,而不针对变量!
例如:
sizeof(double)
sizeof(long)
……
2.7、运算符的优先级
例如:
int x=1, y=0, z=0;
x++ && y++ || ++z //结果为 1 (2 1 1)
! (x+1>0) && y++ || ++z //结果为 1 (1 0 1)
x += y==z, y=x+2, z=x+y+x >0//x为2,y为4 ,z为1