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

时间:2016-03-27 05:15:27

标签: c pointers struct null

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

评论表明最新情况。期望指针为NULL,但是在第二次将指针传递给另一个函数后,IM会得到一个带有NULL值的结构。

header.h

typedef struct node {
int data;
struct node *next;
} *List;

由source.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);
}

2 个答案:

答案 0 :(得分:0)

您的one()功能应该是:

void one(List *self)
{
    two(self);
}

请使用参数-Wall进行编译。此外,建议使用-Wextra-Werror

答案 1 :(得分:0)

List test = NULL;
one(&test);

test是指向struct node的指针。我们传递了那个地址 指向one的指针,允许one更改test(让它返回 新指针是一种更简洁的方法。)

one然后执行此操作:

two(&self);

two现在正在传递test地址的地址。这是 可能不是你想要的。传递test的地址仍然允许 如果您想要这样做,则更改test

two(self);