&&:如果第一个不成立,后面不判断。
||:如果第一个成立后面一个不判断。
位与& 位或| 取反~ 位异或^ 左移<< 右移>>
常量都是有符号的
unsigned int mask = 0x80000000;//掩码
与运算:
1.清0特定位(mask中特定位置为0,其他位为1,s=s&mask)。
2.取某数中指定位(mask中特定位置为1,其他位为0,s=s&mask)。
1111 1111 1111 1111 1111 1111 1111 1111>>32-(n-m+1)
n m
32-(n-m+1)
0000 0000 0000 0000 0000 0000 1111 1111<<(m);
unsigned int mask = ((~0)>>(32-(n-m+1))<<m;
有符号 右移拿符号来补位
左移拿0来补位
定义为无符号 左移,右移都拿0来补位
按位或运算符‘|’
常用来将源操作数某些位置置1
异或
int a=5;
int b=6;
交换位置:
a=a^b;
b=a^b;
a=a^b;
a=a+b;
b=a-b;
a=a-b;
1.使特定位的值取反
2.不引入第三变量,交换两个变量的值
int *p;
scanf(“%d”,p); printf(“%d\n”,*p);
p指向的空间里赋值。
随机指向一块内存的指针叫做野指针,会导致内存泄漏
内存泄漏1.指向一块不可访问的内存。
2.指向一块已经释放的内存。
字符串认知1.字符串就是首字符的地址
2.字符串函数①字符串比较函数:strcmp,strncmp
②字符串拷贝函数:strcpy,strncpy
③长度函数:strlen
④字符串连接函数:strcat
不能把形参作为工作变量
如何避免野指针: 通常我们需要将指针初始化为NULL,用完后也为其赋值为NULL
给指针变量赋初值:
方法一:char * p = (char * )malloc(sizeof(char));
方法二:char * p = NULL;
给数组赋初值:
方法一: int a[10] = {0};
方法二: memset(a, 0, sizeof(a));
memset函数有3个参数:第一个是要被设置的内存起始地址;第二个是要被设置的值;第三个是要被设置的内存大小,单位为字节;
给结构体指针赋初值:
方法一: pstu = (struct student *)malloc(sizeof(struct student));
常见错误: pstu = (struct student *)malloc(sizeof(struct student *));