我无法理解c中的void*指针.我已经google了一下,但还没有真正理解如何解决这个具体问题:
typedef struct _Test{
char* c;
}Test;
void method(void* test){
Test t;
t = *(Test*)test;
t.c = "omg";
printf(t.c); //WORKS
}
int main(){
Test t;
method(&t);
printf(t.c); //NOT WORKING, prints nothing/random letters
return 0;}
Run Code Online (Sandbox Code Playgroud)
为什么?或者更确切地说,解决此问题的最佳方法是什么?
unw*_*ind 11
你正在改变本地对象t内method(),复制后main()的对象t进去.这不会改变main()对象中的任何内容,因为您从不复制到另一个方向.
您应该只通过指针访问并直接更改调用者的对象:
((Test *) test)->c = "omg";
Run Code Online (Sandbox Code Playgroud)
或者,您可以通过使用正确类型的本地指针使其更清晰,这可能是您尝试执行的操作:
void method(void* test) {
Test *t = test;
t->c = "omg";
}
Run Code Online (Sandbox Code Playgroud)
请注意,此处不需要强制void *转换,因为自动转换为Test *C.