5224|15

7

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

如果编程的时候想把某个指针偏移18个字节大家打算怎么写? [复制链接]

来自EEWORLD版主群(68652484)
比如
mbuf_t *m;
想把m向高地址偏移18字节

最新回复

怎么要偏移18字节呢?哪里有这么长的数据定义?64位的CPU数据才是8个字节,不知道你这样移动有什么意义?  详情 回复 发表于 2010-11-20 20:47
点赞 关注

回复
举报

102

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
m = m + 18*sizeof(char);不行好像
 
 

回复
redstone9910 该用户已被删除
板凳
 
提示: 作者被禁止或删除 内容自动屏蔽
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

4
 
redstone9910你这更不对了,m是指针,强转成char型,前面24bit弄丢了,打着灯笼也找不回来了
 
 
 

回复
redstone9910 该用户已被删除
5
 
提示: 作者被禁止或删除 内容自动屏蔽
 
 
 

回复

102

帖子

0

TA的资源

一粒金砂(高级)

6
 
那18字节怎么算啊 不是4的整数倍
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

7
 
嗯。redstone说得很好 我可没说系统是32位的,16位的,还是64位的  对于32位系统,指针是32bit没错   但是对于64位系统,mbuf *是64bit,但unsigned int是32位。指针,也就是地址的前半截没了。
 
 
 

回复

102

帖子

0

TA的资源

一粒金砂(高级)

8
 
我还是不明白这个(char)m += 18*sizeof(char)为什么不行
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

9
 
正确应该转成void *          m是指针,是个地址         char是8bit,放不下这个地址
 
 
 

回复

102

帖子

0

TA的资源

一粒金砂(高级)

10
 
(char*)m += 18*sizeof(char) 这样呢
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

11
 
这样也不行     m = (void *)m + 18          这样写就行了       m是mbuf *类型,直接转char *,编译器会有一个警告
 
 
 

回复

102

帖子

0

TA的资源

一粒金砂(高级)

12
 
(char*)m = (char *)m+18*sizeof(char)
这样呢
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

13
 
赋值等式的左边,强制类型转换没意义                    最后那个sizeof (char)画蛇添足
既然是偏移18字节,void *类型指针自加18就好
我想说明的主要是,指针和unsigned int不能随便互相转
在32位系统和16位系统,这样没有问题。
但是64位系统平台下,这样的代码,指针地址的高32bit就丢掉了。
现在我的工作,就是找出代码中这种错误,修改得能在64bit的CPU上面运行
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(初级)

14
 

回复 10楼 鸽子 的帖子

都是高手哦学习了呵呵
 
个人签名pcb抄板联系我们
 
 

回复

175

帖子

0

TA的资源

一粒金砂(中级)

15
 
指针的问题,看来因扰了好多人呀

你的sizeof(m_buf)是2还是4。如果是4或是其它不能整除18的数,那么恭喜,你的指针用法非法。

另外,你这是要访问外部物理空间,还是malloc一类函数申请出来的空间。
如果是malloc分配的,再次恭喜你,你学会了人为造成存储器泄露。

如果上两个没碰上, (void *)m +=18;
 
个人签名

独自上路,径直潜行

<
 
 

回复

827

帖子

0

TA的资源

一粒金砂(中级)

16
 
怎么要偏移18字节呢?哪里有这么长的数据定义?64位的CPU数据才是8个字节,不知道你这样移动有什么意义?
 
个人签名勇往直前,奋勇拼搏,不畏浮云遮望眼,直挂云帆济沧海
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表