当指向特定类型(例如int, char, float, ..)的指针增加时,其值将按该数据类型的大小增加。如果指向大小为x的数据的空指针被增加,它如何提前x字节指向?编译器如何知道将x添加到指针的值?


当前回答

在void指针中不允许进行指针算术运算。

原因:指针算术与普通算术不同,因为它是相对于基址发生的。

解决方案:在进行算术时使用类型强制转换操作符,这将使执行指针算术的表达式的基本数据类型已知。 例如:point是空指针

*point=*point +1; //Not valid
*(int *)point= *(int *)point +1; //valid

其他回答

在void指针中不允许进行指针算术运算。

原因:指针算术与普通算术不同,因为它是相对于基址发生的。

解决方案:在进行算术时使用类型强制转换操作符,这将使执行指针算术的表达式的基本数据类型已知。 例如:point是空指针

*point=*point +1; //Not valid
*(int *)point= *(int *)point +1; //valid

你不能在void *类型上做指针算术,正是因为这个原因!

不允许对void*指针进行指针算术运算。

在进行指针算术之前,必须将它强制转换为另一种类型的指针。

将其转换为char型指针,使指针向前增加x字节。