c - c 和指针中的 void*

标签 c

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

相关文章:

c - 'fopen' 将如何解释一个容量大于它包含的字符串的 'char[]'?

c - 动态更改c中的定义宏

c - 为什么指针值被修改为值 1?

c - 使用 ‏μC/OS-II 直接解析 json

c++ - OpenGL相机在相机局部轴上平移和旋转

c - OpenGL 旋转和缩放

计算字符串中辅音的个数

java - 在 Java 或 C 中 append 两个十六进制 long 值

c++ - 如何包含自编译库中的 header ?

c - 使用指针访问枚举值