27、C语言编程深入探索

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. 空指针与野指针

在结束指针的介绍前,来了解一下空指针和野指针: <

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值