一、操作符是什么?
指令系统的每一条指令都有一个操作符,它表示该指令应进行什么性质的操作。不同的指令用操作符这个字段的不同编码来表示,每一种编码代表一种指令。
操作符分类
算数操作符:+ - * / (两端的操作数若有一个是浮点数时,会执行浮点运算) %(取余数运算,两端操作数必须都为整数)
移位操作符 : << >> (他的作用是可以将整数二进制位向左或者向右移动)
位操作符:& | ∧ (这里不详细介绍,之后的博客里面会单独讲)
赋值运算符:= += -= *= /= &= ∧= |= >>= <<= (这里所有的+=或者是其他形式的均可理解位A+=B就是A=B+A这种形式)
单目操作符:只有一个操作数的运算符
!(逻辑反) -(负值) +(正值) &(取地址)sizeof(以字节为单位,求数据长度,如果求的是变量名则可以省略(),若为数据类型则不可省略) ~(对一个数的二进制数按位取反) --(前置--和后置--)++(前置++和后置++) *(间接访问操作符)(类型):强制类型转换
这里要注意区分sizeof()和stelen
sizeof()是一个操作符并非函数,用来计算所占内存空间大小。
strlen函数是库函数,只针对字符串,求字符串\0前的字符个数。
关系操作符: >>= <<= != (用来测试不相等) ==(用来测试相等,不能用来判断字符串)想要比较字符串可以用strcmp比较字符串内容。
逻辑操作符:&&逻辑与(全真为真)||逻辑或(一真为真)
条件操作符:exp1?exp2:exp3 (三目运算符,判断exp1为真执行exp2,判断为假执行epx3,整个表达式的结果为exp3)
逗号表达式:exp1,exp2,exp3,.... expN.(从左到右依次执行,表达式的值为最后一个表达式的值)
下标引用,函数调用和结构成员:[] (下标引用操作符,数组中使用) ()(函数调用操作符) .->(指向结构变量的指针)
二、关键字
注意:关键字是无需创建的,系统本身预设好的,变量名不能是关键字
常见的关键字有:aoto(自动的) break continue do while for case switch default(默认的) if else goto char short int long long long double float (数据类型) const(修饰变量,指针) enum(枚举) extren(声明外部符号) register(寄存器关键字) return (函数的返回) sizeof() (是一个操作符,用来查找操作数的大小)struct(结构体) union(联合体/共用体) volatile
这里先介绍几个
typedef:类型重定义,他的作用就是给类型取一个别名
举例:
int main()
typedef usnigned int uint;
{
usnigned int unm;
uint num2;
}
这里就是给usnigned int 取了个别名叫uint,之后所有的usnigned int跟uint同理,这里uint num2;和usnigned int num2;同理
static:静态的 他是用来修饰变量或者函数的
1.修饰局部变量
#include <stdio.h>
void test()
{
int i = 0;
i++;
printf("%d ", i);
}
int main()
{
int i = 0;
for(i=0; i<10; i++)
{
test();
}
return 0; }
这时这个代码的运行结果应该是 1 1 1 1 1 1 1 1 1 1
当我们用static修饰之后
#include <stdio.h>
void test()
{
//static修饰局部变量
static int i = 0;
i++;
printf("%d ", i);
}
int main()
{
int i = 0;
for(i=0; i<10; i++)
{
test();
}
return 0; }
这个代码的运行结果为 1 2 3 4 5 6 7 8 9 10
对比两段代码,我们用static修饰局部变量之后,变量的生命周期发生了变化,由出作用域就销毁变为整段程序结束
2.修饰全局变量
//add.c
int g_val = 2018;
//test.c
int main()
{
printf("%d\n", g_val);
return 0;
}
这时候代码可以正常引用外部的文件
//add.c
static int g_val = 2018;
//test.c
int main()
{
printf("%d\n", g_val);
return 0;
}
但当我们使用static修饰函数之后,这个程序就无法正常运行。通过对比可以知道,当一个全局变量被static修饰时,他就只能在自己的.c文件中使用,外部链接属性变为内部链接属性,其他源文件就无法通过链接使用。
3.修饰函数
//add.c
int Add(int x, int y)
{
return c+y; }
//test.c
int main()
{
printf("%d\n", Add(2, 3));
return 0;
}
可以正常引用函数
但是当我们用static修饰函数后
//add.c
static int Add(int x, int y) {
return c+y; }
//test.c
int main()
{
printf("%d\n", Add(2, 3));
return 0; }
代码就会报错 ,当一个函数被static修饰时也会使得这个函数外部链接属性变为内部链接属性,不能被外部链接所使用,只能在.c文件内部中使用。