我无法理解 c 中的 void* 指针。我四处搜索,但还没有真正理解如何解决这个具体问题:
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;}
为什么?或者更确切地说,解决/解决此问题的最佳方法?
最佳答案
您正在更改本地对象 t
里面method()
, 复制后 main()
的对象 t
进去。这不会改变 main()
中的任何内容的对象,因为你永远不会在另一个方向复制。
你应该只通过指针访问并直接改变调用者的对象:
((Test *) test)->c = "omg";
或者,您可以使用适当类型的本地指针使其更清晰一些,这可能正是您想要做的:
void method(void* test) {
Test *t = test;
t->c = "omg";
}
注意这里不需要转换,因为void *
自动转换为 Test *
在 C 中。
关于c - c 和指针中的 void*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13743538/