c-试图更改链表节点中的数据



我已经向每个节点添加了数据(1.0到9.0之间的双值(。现在我试图访问每个数据来修改它,使每个节点中的双值为负(-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);

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

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

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

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

您的错误:

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
   }
void changeToNegative(void *data) {
    double newData = *((double*)data) * -1.0;
    data = &newData;
}

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

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

您在changeToNegative函数中为data的本地副本分配了修改数据的地址,该地址不会反映在调用方的函数中。相反,取消引用并修改data,以便将更改反映回调用者。

相关内容

  • 没有找到相关文章

最新更新