【发布时间】:2014-06-02 19:42:49
【问题描述】:
void foo(void *ptr, int numBytes)
{
(char*)ptr += numBytes;
}
这不能在 C 中编译。我知道替代方案。但是为什么这不起作用?有什么问题?
【问题讨论】:
-
5 += 7失败的原因相同。 -
因为你没有使用 GCC。更准确地说,C 标准禁止它,因为指向的事物的大小是未知的,并且指针运算取决于对象的大小。您也不能增加函数指针。 GCC 确实允许在
void *上进行算术运算(为此将其视为与char *的同义词),但它是标准的扩展,并且更经常出于意外而不是有意使用。避免在void *! 上进行算术运算! -
实际上,我之前的评论——谢天谢地是评论——大多与问题无关;它详细说明了为什么
ptr += numBytes;不被 GCC 以外的编译器接受(并且可能在其 GCC 兼容模式下发出叮当声),而不是为什么强制转换不起作用。信息有效,但略有偏离目标。
标签: c