我可以在C中的void *指针上进行算术吗?

这是有效的

void *p = &X; /* some thing */
p += 12;

如果是这样,p现在指的是什么?
我有(第三方)代码执行此操作(并且编译干净),我的猜测是,void *被视为一个char *.我的信任K& R是沉默(ish)的话题

编辑:我的小测试应用在gcc 4.1.1上运行正常,并将void *视为char *.但是g barfs

我知道如何正确地做.我需要知道,如果我必须清理这个代码库,找到它完成的所有地方.

BTW gcc -pedantic发出警告

概要:

C规范是不明确的.它表示在表示和使用方面作为函数参数void * = char *.但是指针算术是无声的.

> gcc(4)允许它并将其视为
char *
g拒绝它
> gcc -pedantic警告它
> vs2010 c和c
拒绝

最佳答案
这取决于编译器.那些允许它考虑sizeof(*(void *))为1.

编辑:只用于void指针算术.在这种情况下,使用sizeof(int)或0的步骤是没有意义的.使用它的人的共同期望将是尽可能小的步骤.

转载注明原文:我可以在C中的void *指针上进行算术吗? - 代码日志