Chinaunix首页 | 论坛 | 博客
  • 博客访问: 423062
  • 博文数量: 155
  • 博客积分: 2590
  • 博客等级: 少校
  • 技术积分: 2161
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-25 09:33
文章分类

全部博文(155)

文章存档

2015年(1)

2014年(2)

2013年(55)

2012年(97)

分类: C/C++

2012-11-09 10:30:47

  1. void *p;  
  2. p++;  
  3. ...  

 

问:如果p的值为0x7f6c5b30,执行完p++,p的值为多少?
 
如果是char *p,答案是0x7f6c5b31;
如果是int *p,答案可能是0x7f6c5b32(如16bit DSP),可能是0x7f6c5b34(如32bit winxp),可能是0x7f6c5b38(如64bit Linux SUSE);
如果是void *p呢?
ANSI C 规定,不可以对void指针进行运算操作,因为我们不知道指针指向的数据类型大小,无法进行偏移;
但,
GNU规定,void指针的运算操作与char型保持一致;
因此,为了程序的可移植性,我们需要在处理void指针运算时一律转换为char型处理,例如:
  1. void *p;  
  2. ((char *)p)++;    //通过这种手段控制p的偏移  
  3. 原文地址:
阅读(850) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~