返回指针并修改指针指向的内容

时间:2013-10-19 21:38:53

标签: c pointers memory linked-list

我在一个函数中有一个指针,我想返回该指针,以便我可以修改它稍后指向的内容。将返回它返回指针指向的地址或指针本身?这个问题是因为我想改变链表头指向的内容。

所以例如

struct node_{
    //variables
}*headPtr=NULL; //assume when we are returning headPtr in foo() it is no longer NULL but points to something

typdef struct node_ node;

node foo(){
    //some if conditions
    return headPtr;
}

main(){
    node *tmpPtr;
    tmpPtr=foo();
}

2 个答案:

答案 0 :(得分:0)

此函数获取指向链表头部的指针,其他一些参数,创建一个新节点并将列表追加到它并返回de new head。

 struct type *ptr_change_head(struct type *ptr_old_head, other args){
  struct type *ptr = ptr_old_head;
  struct type *ptr_new_head = <new head>;

  ptr_new_head->ptr_next = ptr;

  return ptr_new_head;

}

答案 1 :(得分:0)

首先,让我们让你的类型匹配。 foo()的类型签名表示它返回node,但您实际上是在尝试返回指向node的指针。我们将foo()重新定义为

node *foo() {
    return headPtr;
}
  

返回它会返回指针指向的地址还是指针本身的地址?

该行

tmpPtr = foo();

会将变量tmpPtr放入指针所指向的地址,而tmpPtr将是另一个与headPtr完全匹配的变量。也就是说,两个指向同一事物的单独指针。这里有两个不同的要点:

  • tmpPtrheadPtr是两个独立的变量,如果您重新分配一个变量,它将对另一个变量没有影响。
  • 由于它们当前指向同一节点,因此可能可能通过取消引用任一指针来改变它们指向的节点,假设它们指向实际节点而不是NULL。 / LI>

如果您的目的是更改headPtr指向您的内容:

  • 使用headPtr等作业直接更改headPtr = something
  • 设置指向headPtr的{​​{1}}指针。

您可以使用

之类的东西设置指向node**的指针
headPtr

这会将node **foo() { return &headPtr; } int main() { node **headPtrPtr = foo(); *headPtrPtr = something else; } 指向headPtrPtr。通过解除引用headPtr,您可以使headPtrPtr指向新节点。