C:传递数组输入的函数

时间:2017-02-01 16:50:07

标签: c

我有一个关于C函数的初学者问题,比如我有一个指向链表的指针数组,我想编写一个函数来向数组中添加一个节点的指针:

void addhash(int value,struct node ** arr[]){
    struct node *p =(struct node*)malloc(sizeof(struct node));
    p->value=10;
    arr[value]=&p;
};

这是定义功能的正确方法吗?当我在main中运行它时,我尝试添加节点的存储桶仍然是NULL。

2 个答案:

答案 0 :(得分:1)

arr[value]=&p实际上是返回一个指向局部变量的指针,这永远不是一个有效的事情。函数返回后,本地变量不存在。看起来您想要的是将参数声明为node *arr[]并将该行更改为arr[value]=p。这将正确保存指向您为节点分配的内存的指针。

您可能还想考虑让函数分配和初始化node结构并返回它是否更有意义,此时调用者可以将其添加到数组中。

答案 1 :(得分:0)

在你的例子中,你没有添加节点的指针,但是你正在为节点添加一个pointeur。 节点的pointeur是p,如果你保存p的地址,那么你正在保存指针的地址。我们有p是一个局部变量,所以当我们从函数返回时它会错位。

规则:永远不要试图保存局部变量的地址,并在声明此变量的函数之外使用它。

void addhash(int value,struct node * arr[]){
struct node *p =(struct node*)malloc(sizeof(struct node));
p->value=10;
arr[value]=p;
};

我希望我已经回答了你的问题