传递一个包含NULL的结构指针时,突然会包含一个struct而不是NULL
好的,我重新创建了一个较小的示例,问题仍然存在 评论表明发生了什么。期望指针为NULL,但在第二次将其传递给另一个函数后,我得到了一个具有NULL值的结构 标题.h传递一个包含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) { /
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个函数。我猜他是故意这样做的,为了让这个问题出现。不过我认为你是对的。返回指针要比在函数内部以不同的方式处理它们要好得多。我自己也已经得出了这个结论,但不确定我是否只是走了一条简单的路,因为我只是做错了。