我在一个函数中有一个指针,我想返回该指针,以便我可以修改它稍后指向的内容。将返回它返回指针指向的地址或指针本身?这个问题是因为我想改变链表头指向的内容。
所以例如
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();
}
答案 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
完全匹配的变量。也就是说,两个指向同一事物的单独指针。这里有两个不同的要点:
tmpPtr
和headPtr
是两个独立的变量,如果您重新分配一个变量,它将对另一个变量没有影响。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
指向新节点。