操作符🐣
算术操作符> + - * / % (取模)
/ 除号两边没有小数就是进行的整数除法,若想结果带有小数必须两个数中有一个有小数点
float c = 10 / 3.0; //int / double -> double 3.333333
printf(“%f\n”, c);
% 取模操作符两边必须是整数
int a = 10 % 3; //10/3…1 10除3余1
移位操作符 (移动的是二级制位)> >> <<
位操作符 (操作的也是二级制位)> & (与) ^(异或) |(或)
赋值操作符> = += -= *= /= &= ^= |= >>= <<=
a = a + 10; a += 10;//2
a -= 2; a = a - 2;
单目操作符 > ! 逻辑反操作
负值
正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
– 前置、后置–
++ 前置、后置++
间接访问操作符(解引用操作符)
(类型) 强制类型转换
!
//C语言中,0就是假,非0就是真
//int a = 10;
//int b = !a; 10是真 ,!a就是假 就是0
//printf(“b=%d\n”, b);//打印0
sizeof
//printf(“%d\n”, sizeof(a));
//printf(“%d\n”, sizeof(int));
~
//00010101 二进制按位取反
//11101010
++
int a = 10;
int b = ++a;//前置++,先++,后使用
//a=a+1;b=a;
int b = a++;//后置++,先使用,后++
//b=a;a=a+1;
–
int a = 10; • 1
//int b = --a;//前置–,先–,再使用
int b = a–;//后置–,先使用,再–
() 强制类型转换
int a = 3.14;
//int a = (int)3.14;//强制类型转换
关系操作符 > > >= < <=
!= 用于测试“不相等”
== 用于测试“相等”
逻辑操作符 > && 逻辑与 || 逻辑或
并且 或者
条件操作符 > exp1 ? exp2 : exp3
int a = 3;<br /> int b = 5;<br /> int m = 0;<br /> if (a > b)<br /> m = a;<br /> else<br /> m = b;<br /> m = ((a > b) ? a : b);
逗号表达式 > exp1, exp2, exp3,…expN
下标引用、函数调用和结构成员 > [] () . ->
[]
int arr[10] = { 1,2,3,4,5 };
// 0 1 2 3 4
printf(“%d\n”, arr[4]);//[]就是下标引用操作符
//[] - arr 4
()
printf("hello");//()就是函数调用操作符 • 1
//()的操作数是函数名printf,第二个就是"hello"
常见关键字
:::success
auto break case char const continue default do double else enum
extern float for goto if int long register return short signed
sizeof static struct switch typedef union unsigned void volatile while
:::
auto 自动变量 > int main()
{
auto int a = 10; //一般都是省略掉的 本来就是用来修饰局部变量的
return 0;
}
总概volatile 是Linus中要讲的现在不管
typedef typedef unsigned int uint; //觉得unsigned int写起来很复杂 就换个名字 int main() { unsigned int num1 = 0; uint num2 = 0; return 0; }
register 寄存器关键字
int main(){
register int num = 10;
//寄存器变量是不能取地址的,为什呢?因为取地址是取内存的地址
// 如果这个num在程序中被多次运用我们就可以使用register
//register 起到一个建议的作用,建议讲num的值放在寄存器中,
//最终是由编译器决定的
return 0;
}
static - 静态的
- static可以修饰局部变量
:::success
static 修饰局部变量的时候,改变了局部变量的存储类型:
一个局部变量本来是存储在栈区的,被static修饰的局部变量是存储在静态区的
存储在静态区的变量出了它的作用域变量也不会销毁,所以生命周期比较长。但是作用域是不被改变的。
static修饰的局部变量和程序的生命周期一样长
:::
- static可以修饰全局变量
static 修饰全局变量时,改变了全局变量的链接属性
本来一个全局变量具有外部链接属性,但被static修饰后就变成了内部链接属性
这时被static修饰的全局变量只能在本源文件(.c)中使用,其他文件无法再使用