C 无效使用void表达式-使用类型转换添加2个不同类型的指针
我有三个指针变量,*segbase,*offset和*data。segbase和data的类型为void,但偏移量为int 我想要实现的是——获取segbase所指向的内存地址,向其添加偏移量,并将结果内存地址复制到数据中 因为segbase和data不是integer类型的指针,所以对它们进行类型转换是有意义的。但是,我在C 无效使用void表达式-使用类型转换添加2个不同类型的指针,c,pointers,casting,type-conversion,C,Pointers,Casting,Type Conversion,我有三个指针变量,*segbase,*offset和*data。segbase和data的类型为void,但偏移量为int 我想要实现的是——获取segbase所指向的内存地址,向其添加偏移量,并将结果内存地址复制到数据中 因为segbase和data不是integer类型的指针,所以对它们进行类型转换是有意义的。但是,我在(int*)*data=(int*)*segbase+*offset一行中得到了错误“无效使用void表达式” int main() { void *segbase;
(int*)*data=(int*)*segbase+*offset一行中得到了错误“无效使用void表达式”代码>
int main()
{
void *segbase;
int *offset;
void *data;
printf("\nAddress of segbase = %u", segbase);
printf("\nAddress of offset = %u", offset);
printf("\nAddress of data = %u", data);
printf("Now performing the function");
(int*)*data = (int*)*segbase + *offset;
printf("\nAddress of data = %u", data);
}
我想你们想要的,如果偏移量是字节偏移量,是
data = (void*)((char*)segbase + *offset);
有些C编译器将偏移void*指针当作char*来处理,在这种情况下
data = segbase + *offset;
你确定偏移量也是一个指针而不是普通的int吗?千万不要将指针投射到int
。如果要将指针增加若干字节,请将其强制转换为目标大小始终为一个字节的char*
。然后将其分配给左侧没有强制转换的void指针。您建议我如何实现预期结果?您说偏移量为into,但您将其显示为int*我建议您考虑一下代码的功能。提示:typecast表达式不是左值。您仍然不应该使用void*进行算术运算,即使您正在使用的编译器没有抱怨。例如,GCC会抱怨-迂腐。