c和指针中的void*

Der*_*gon 2 c

我无法理解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

你正在改变本地对象tmethod(),复制后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.