您的位置:首页 > 编程语言 > C语言/C++

C语言void指针的运算操作[小知识]

2012-11-05 22:23 429 查看
void *p;
p++;
...


问:如果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型处理,例如:

void *p;
((char *)p)++;    //通过这种手段控制p的偏移
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: