尝试更改链接列表节点中的数据

时间:2013-03-02 21:45:18

标签: c pointers linked-list nodes

我已经为每个节点添加了数据(从1.0到9.0的双值)。现在我试图访问每个数据来修改它,以便每个节点中的double值为负(-1.0到-9.0):

void traverseList(struct List *list, void (*func) (void *)) {
    struct Node *current = list->head;
    while(current) {
        func(current->data);
        current = current->next;
    }
}

void changeToNegative(void *data) {
    double newData = *((double*)data) * -1.0;
    data = &newData;
}

我用以下方式调用上述内容:

traverseList(&list, &changeToNegative);
traverseList(&list, &print);

然而,它仍然只打印出正值......我正在为数据重新分配一个新的内存位置,所以我不明白它是如何仍然指向旧的内存位置。任何帮助表示赞赏!

4 个答案:

答案 0 :(得分:2)

修改您的代码,如下所示。而不是将指针分配给数据分配值,如下所示

void changeToNegative(void *data) {
   double newData = *((double*)data) * -1.0;
   *data = newData;
}

通过这种方式,您将修改数据指向的值,并且更改将是持久的。

答案 1 :(得分:2)

您的错误:

void changeToNegative(void *data) {
    double newData = *((double*)data) * -1.0;
    data = &newData;
}

在功能changeToNegative(void *data)中,您正在修改data。在修改*data时。 请参阅通过地址传递的参数void* data,以反映调用函数的更改。

简单地说:

   void changeToNegative(void *data) { 
      *((double*)data) *=-1;   // nagt value pointed data pointer
   }

答案 2 :(得分:0)

void changeToNegative(void *data) {
    double* theData = (double*)data;
    *theData = (*theData) * -1.0;
}

您在data函数中分配了changeToNegative的本地副本,其中包含已修改数据的地址,这些副本不会反映在调用者的函数中。而是取消引用和修改就地data,以便将更改反映回调用者。

答案 3 :(得分:0)

void changeToNegative(void *data) {
    double newData = *((double*)data) * -1.0;
    data = &newData;
}

此函数的最后一行将名为data指针设置为指向一个新位置,而不是最初传递给该函数的位置。 会影响存储在原始内存位置的数据。相反,您想要取消引用指针并将其设置为新值:

*data = *((double*)newData);