指针学习《二》

本文介绍如何在C语言中通过函数指针实现直接跳转,并详细解析了打印浮点数的16进制值的方法,包括如何通过类型强制转换访问同一数据空间的不同结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1  C中直接实现跳转。

    a 定义一个简单函数指针  void (*GotoAddr)(void);

    b 初始化函数指针为一指定绝对地址,GotoAddr = (void (*)())100000,由于该变量类型为函数指针,所以要强制转换为函数指针类型后赋值,不然会报类型不匹配的错误 ;

    c 使用函数指针实现跳转 ,(* GotoAddr)() 就会直接跳转到100000地址处执行。

2  打印浮点数的16进制值问题。  解决方法*((long*)&float_data)。    直接按新的数据类型规则访问原来的数据空间。这印证了我的一个想法:数据类型就是一种对数据的解释格式,对同一个数据空间用不同的数据类型解释,可能会有不同的结果(有些可能相同)

涉及两个问题:   

     一  %x只对整型值 ,所以不能直接强制转换。   

     二  强制转换是一个拷贝过程,即原数据没有被改变,我们只是对他的拷贝版本强制转换后再使用, (float)float_data已经不是原来的数据了,而是修改过的数据。但是 *((long*)&float_data) 就是先获得数据的首地址(指针),再将将指针转换为(long *)类型指针 ,最后按long类型规则 访问指针指向的空间(float_data)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值