传递一个包含NULL的结构指针时,突然会包含一个struct而不是NULL

传递一个包含NULL的结构指针时,突然会包含一个struct而不是NULL,c,pointers,struct,null,C,Pointers,Struct,Null,好的,我重新创建了一个较小的示例,问题仍然存在 评论表明发生了什么。期望指针为NULL,但在第二次将其传递给另一个函数后,我得到了一个具有NULL值的结构 标题.h typedef struct node { int data; struct node *next; } *List; 资料来源c #include "Header.h" #include <stdio.h> #include <stdlib.h> void two(List *self) { /

好的,我重新创建了一个较小的示例,问题仍然存在

评论表明发生了什么。期望指针为NULL,但在第二次将其传递给另一个函数后,我得到了一个具有NULL值的结构

标题.h

typedef struct node {
int data;
struct node *next;
} *List;
资料来源c

#include "Header.h"
#include <stdio.h>
#include <stdlib.h>

void two(List *self)
{
    //*self does not = NULL now
    //*self = a struct with null data and next values
}

void one(List *self)
{
    two(&self);
    // *self = 0x0000... NULL
}

int main()
{
    List test = NULL;
    one(&test);
}
#包括“Header.h”
#包括
#包括
无效二(列表*自身)
{
//*self现在不为空
//*self=具有空数据和下一个值的结构
}
无效一(列表*自身)
{
两个(自我);
//*self=0x0000…空
}
int main()
{
列表测试=NULL;
一个(测试);
}
您的
one()
函数应该是:

void one(List *self)
{
    two(self);
}
请使用参数
-Wall
编译。此外,建议使用
-Wextra
-Werror

List test = NULL;
one(&test);
test
是指向
struct节点的指针。我们通过了那家公司的地址
指向
one
的指针,允许
one
更改
test
(让它返回一个 新指针是一种更干净的方法)

one
然后执行以下操作:

two(&self);
two
正在传递
test
的地址。这是 可能不是你想要的。传递
测试的地址仍然允许
如果您想这样做,您可以更改
test

two(self);

我认为这是不允许的。
*具有结构定义的指针。
很抱歉,我不能显示实际代码,因为这是一个赋值。
:我们无法帮助您。我们需要实际的代码。此外,如果您将粘贴的代码从一个项目复制到另一个项目,并且语义/结果不同,那么在这两个项目之间会发生一些非常奇怪的事情,很可能源于该项目的其他代码。很抱歉,我不打算尝试破解您的计算机以发现您的代码并解决您的问题。请输入您的代码。@ameyCU:BTW,该语法有效。不是很有用,但它是有效的。实际上有一个区别。。。函数以相同的方式再次将其传递给另一个函数(&…)。。赛尔夫在第二关中被取消为空。你只能这样通过一次吗?PS没有复制n过任何代码。。。写的都是新的。只是比较了2个小时的项目,看不出有什么问题。Thanx很多。在类似的例子中,我们一直在传递函数的地址,以修改已经存在的内容。但是现在这个赋值需要修改才能通过2个函数。我猜他是故意这样做的,为了让这个问题出现。不过我认为你是对的。返回指针要比在函数内部以不同的方式处理它们要好得多。我自己也已经得出了这个结论,但不确定我是否只是走了一条简单的路,因为我只是做错了。