我试图使用C中的链表编写一个一致性程序。为此,我要从函数返回一个指向动态分配结构的指针。但是,函数中的指针地址与返回值的地址不匹配。相关代码如下。

int main(int argc, char *argv[]){
    ...
    struct wordlist *a = NULL;
    ...
    a = firstNode(word);
    printf("%p\n",(void*)&a);
    ...
}

struct wordlist * firstNode(char *fileWord){
    struct wordlist *newNode = malloc(sizeof *newNode);
    newNode->word = fileWord;
    newNode->next = NULL;
    newNode->previous = NULL;
    printf("%s\n",newNode->word);
    printf("%p\n",(void*)&newNode);
    return newNode;
}


当我打印newNode的地址时,它总是与在main中打印a的值时不同。

最佳答案

您要打印返回的内容吗?

没有。

您正在打印错误的东西。

 printf("%p\n",newNode);


现在,您将看到返回的值和您打印的值将匹配。以前,您是在回购东西并打印另一幅。

说明

之前,您是动态分配内存,而malloc的返回值存储在局部变量newNode中。现在,您正在打印newNode的地址。不是newNode包含从函数返回的内容。

还要检查malloc的返回值。取消分配动态分配的内存。

关于c - 动态分配的指向不从C函数返回的结构的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47342465/

10-11 16:55