目录
5.谈谈你对指针的理解(什么是指针?指针的作用?指针的运算?)
1.逻辑运算符的使用注意事项?
2.掩码的作用?什么时候使用& | ^
清零取位要用与
某位置一可用或
若要取反和交换 轻轻松松用异或
清零特定位 (mask 中特定位置 0,其它位为 1,s=s& mask)
取某数中指定位 (mask 中特定位置 1,其它位为 0,s=s& mask)
常用来将源操作数某些位置 1,其它位不变。 (mask 中特定位置 1,其它位为 0 s=s|mask)
使特定位的值取反 (mask 中特定位置 1,其它位为 0 s=s^mask)
3.位运算的作用?
4.使用异或交换两个变量的值?使用四则运算交换?
int a = 5, b = 10;
a = a ^ b;
b = a ^ b; // Now, b is the original value of a
a = a ^ b; // Now, a is the original value of b
printf("a = %d, b = %d\n", a, b);
int a = 5, b = 10;
int temp;
temp = a;
a = b;
b = temp;
printf("a = %d, b = %d\n", a, b);
5.谈谈你对指针的理解(什么是指针?指针的作用?指针的运算?)
*start++; === *(start++)
优先级++、*相同,结合律从右往左,所以 start++先求值
*++start; ==== (*start)++
6.指针变量的大小为什么是固定的?
7.为什么会有不同类型的指针?
8.万能指针的作用及注意事项?
9.什么是野指针?如何避免野指针?如何检测野指针?
两种情况下会存在野指针:
第一个是定义了一个指针变量,没有给他指向有效空间或者置 为空时,系统会默认初始化一个随机地址,变成野指针。
第二个是,在释放一个指针变量 指向空间时,没有置空,也会变成野指针。
野指针的使用会产生内存泄漏。 野指针不会直接引发错误,操作野指针指向的内存区域才会出问题。
所以无法通过简单判 断是否为空避免,只能通过养成良好的编程习惯尽量去减少。 我们养成良好的编码习惯包括以下几点:
第一,定义一个指针变量时,要么设为空,要么指向合法的内存。
第二:向指针变量指向 的空间赋值时一定要开辟内存空间。
第三:开辟空间后需要检查是否分配成功。
第四: 分配成功后要进行初始化。
第五:注意使用时不要越界访问,否则会产生内存泄漏。
第 六:结束时一定要释放内存空间。
第七:释放完之后要将指针变量置为空。 养成良好的编码习惯只能是尽量避免,不能完全杜绝,野指针引发的内存泄露问题,通常 我们会使用内存检测工具, 大多数情况下,我们会选择 gcc 自带的工具 ASAN,还有 valgrind 工具。