1

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

所以例如

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();
}
4

2 回答 2

0

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

node *foo() {
    return headPtr;
}

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

线

tmpPtr = foo();

tmpPtr将把指针指向的地址放入变量中,并且tmpPtr将是另一个完全匹配的变量headPtr。也就是说,指向同一事物的两个独立的指针。这里有两点需要说明:

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

如果您的意图是更改headPtr指向您的内容,则可以:

  • 直接headPtrheadPtr = something.
  • headPtr用 type设置一个指针node**

headPtr您可以使用类似的东西设置一个指针

node **foo() {
    return &headPtr;
}

int main() {
    node **headPtrPtr = foo();
    *headPtrPtr = something else;
}

这将放入headPtrPtr一个指向headPtr. 通过取消引用headPtrPtr,您可以headPtr指向一个新节点。

于 2013-10-19T22:23:27.037 回答
0

这个函数接受一个指向链表头的指针,一些其他参数,创建一个新节点并将列表附加到它并返回新的头。

 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;

}
于 2013-10-19T21:44:40.280 回答