Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 无效使用void表达式-使用类型转换添加2个不同类型的指针_C_Pointers_Casting_Type Conversion - Fatal编程技术网

C 无效使用void表达式-使用类型转换添加2个不同类型的指针

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;

我有三个指针变量,*segbase,*offset和*data。segbase和data的类型为void,但偏移量为int

我想要实现的是——获取segbase所指向的内存地址,向其添加偏移量,并将结果内存地址复制到数据中

因为segbase和data不是integer类型的指针,所以对它们进行类型转换是有意义的。但是,我在
(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会抱怨-迂腐。