C语言编程深入探索
1. 指针类型转换与位级重解释
在C语言里,尽管指针值是有类型的,但它允许将一种指针类型转换为另一种。这就能够把内存位置的字节重新解释为任意期望的类型。例如,位模式 11000010101110101000000000000000 ,若解释为32位整数,其值为 -1027964928 ;若解释为32位浮点数,其值为 -93.25 。下面是实现这种“重解释”的代码:
#include <inttypes.h>
#include <assert.h>
#include <stdlib.h>
int main() {
int32_t a = 0b11000010101110101000000000000000;
float b = *(float*)&a;
assert(a == -1027964928);
assert(b == -93.25);
return EXIT_SUCCESS;
}
其他语言也能进行内存的位级重解释,但情况有限。像Java可以获取浮点数的位并将其解释为整数,JavaScript的 DataViews 和Python的 struct 模块也能做到。不过,C语言能将任意内存位块解释为(几乎)任意类型,这在高级语言中是比较少见的。
2. 空指针与野指针
在结束指针的介绍前,来了解一下空指针和野指针: <
超级会员免费看
订阅专栏 解锁全文
1280

被折叠的 条评论
为什么被折叠?



