c - 如何通过函数修改指向 void 的指针?

标签 c pointers void void-pointers

我正在尝试创建一个链表,您可以在其中更新节点中的数据,但无论我尝试什么,C 似乎都不允许我更新 void 指针的值(或者更确切地说,它在哪里指着)。这是我的测试代码:

void newData(void * d)
{
    char data[] = "world";

    d = &data;
}

int main()
{
        char testData[] = "hello";
        void * testPointer = &testData;

        printf("TestData is %s\n", (char *)testPointer);

        // Modify the data
        newData(&testPointer);

        printf("TestData is %s\n", (char *)testPointer);
}

这只是输出::

TestData is hello
TestData is hello

我在这里遗漏了什么明显的东西吗?我也尝试过使用指向指针的指针,但无济于事。

最佳答案

我觉得你需要

void newData(void ** d) 
{
    char data[] = "world";
    *d = &data;  
}     

但是,这有它自己的问题,因为“world”是本地堆栈,从 newData 返回后将无效。

关于c - 如何通过函数修改指向 void 的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4938006/

相关文章:

C - 数组、排序和修改

c - 带有嵌套 for 循环的 OpenMP 双重缩减

C 如何在不使用break的情况下验证循环中的输入

c - 声明一个不返回任何内容且没有任何参数的函数是否合法?

c++ - mingw32-make : *** No targets. 停止

c# - Unsafe.AsPointer<T>(ref T value) 是如何工作的?

c - 如何正确地为函数中的结构分配内存以返回其值供以后使用以及如何将结构转换为指针?

scala - scala 中的 void 函数等效吗?

c - 什么时候在 C 中需要转换 void 指针?

c++ - 指针的两种不同类型的星号位置?