1.关键字
C语言提供了丰富的关键字,这些关键字都是语言本身预先设定好的,发挥特定特定的作用,用户自己是不能创造关键字的,对变量,结构体命名时也不可以使用关键字。
关键字一共有32个,我们对其简单分类
(1)数据类型
包括char double enum int long void float short struct typedef
其中typedef关键字可以改变数据类型的名称
如把int改成size
后面使用size来定义数据的时候就是int型的数据
typedef int size;
size a=0;
(2)修饰变量
const extern signed unsigned static
auto volatile register
signed unsigned 可以改变变量的值为有符号/无符号
如unsigned int即为无符号整型
static可以修饰静态全局变量
比如局域变量在定义域结束之后应该被销毁
但是static可以防止销毁
#include <stdio.h>
void test()
{
static int i = 0;
i++;
printf("%d ", i);
}
int main()
{
int i = 0;
for (i = 0; i < 10; i++)
{
test();
}
return 0;
}
上面的代码中,如果没有static修饰变量i
在test函数调用结束后,i变量就会被销毁,再次进入test函数,i又被初始化成0,最终打印的值永远是1.
加上了static之后,i就不会被销毁,重复运行static int i=0也不会让i被重新改成为0,就可以打印1~10的数了
相比较全局变量,它可以防止被其他文件所使用
同样static也可以修饰全局变量和函数,让变量和函数只能在所在文件使用,缩小使用范围。
extern引用外部变量
如果我在file2文件中定义了一个全局变量i想要在file1文件上使用,就需要在file2文件引用时用extern引用变量。
int main()//file1
{
extern int num;
printf("%d", num);
return 0;
}
int num = 5;//file2
后面三个关键字auto volatile register
涉及到内存/进程相关,等到后面再讲。
(3)流程控制
break case continue default do else for goto if switch while return
这些关键字可以对代码进行跳转,循环,选择等操作,控制程序的运行。
其实sizeof即属于关键字,也属于操作符,在下面提及
2.运算符
c的运算符有很多种类,包括:
(1)算术运算符
即加减乘除和自加(++),自减(–)以及取模
要注意的是(1)取模运算符(%)两边的数只能是整数
除法(/)两边的数都是整数的话,进行整数除法如3/2商1余1,运算结果就是1。
如果两边的数有一个数是小数就进行小数除法,3.0/2的值为1.5
(2)关系运算符
!=, >, <, >=, <=
进行大小的判断,根据真假输出结果
(3)逻辑运算符
&& ,||, !
代表逻辑与,或,非
(4) 位运算符
& | ^
<< >> ~
即按位与 按位或 按位异或
按位取反,左移,右移
他们都是对储存在内存中的的补码进行操作的
其中按位与 按位或 按位异是对两个的二进制位比较的
比如说3和7
他们在内存中用补码来看
3=00000000000000000000000000000011
7=00000000000000000000000000000111
对两个数的同位进行比较
如果是按位与
两个数的同位有一个为0,则结果为0
对三十二位都进行比较,得到一个结果
这是3和7按位与的结果的二进制,转为十进制就是3
按位或则是
两个数的同位有一个为1,则结果为1
那么这是3和7按位或的结果就是
00000000000000000000000000000111,转换为十进制就是7
按位异或则是看两位是否相同
相同的话则为0,不同的话则为1
那么3和5按位异或的结果就是
00000000000000000000000000000100,转换为十进制就是4
按位取反(~)则是对二进制所有位按位取反
左移右移则是将二进制位进行移动,溢出的部分会被废除,而空缺的位置补上数字
左移补充的数字为0
而右移则是在左侧补充符号位
如-2
转换为补码为11111111111111111111111111111110
右移之后就为11111111111111111111111111111111
(5)赋值运算符
赋值的运算符为=
但是赋值运算符可以和其他运算符连用
比如a=a+1
可以写成a+=1
(6)杂项运算符
sizeof,(? : ),以及和地址有关的&和*
sizeof可以计算变量在内存中占用的内存大小(单位是字节)
也可以用于数组
比如定义一个数组arr[10]={0};
用sizeof(arr)的值就是4×10=40
&和*则是和地址有关
? :是三目运算符
格式为: 表达式1:表达式2?表达式3
表达式1值为真则执行表达式2
表达式1值为假则执行表达式3
点个赞再走呀!