繁体   English   中英

函数调用后指针会发生什么

[英]What happens to pointers after function call

当一个指针从一个指针结构点指向另一个分配了内存的结构时,函数调用后会发生什么? 之前我问了一个有关结构的问题,这导致我提出这个问题: 函数中结构指针的范围

例如:

struct example{
//variables and pointers
struct clip *next;
}*Head

然后我在函数中有一个数据类型为struct的指针:

struct example *newNode=malloc(sizeof(struct example));

在同一函数中,我将第一个节点(头)链接到第二个节点(新节点):

Head->next=newNode;

功能退出后,链接/指向是否仍然有效? 我不确定这是否有意义,但是当您在链表的末尾添加一个新节点时,您必须首先检查链表以了解它的结尾(下一个指针= NULL)。

例如:

void insert_at_end(){
//We have a pointer cp that goes through the linked list, initially cp->next points to `null so we create a newnode right away`
//struct example cp and newnode gets malloc'd here

if(Head != NULL){
cp=Head;
while(cp->next !=NULL){
cp=cp->next;
}
cp->next=newNode;
else{

//We link the head to the newNode `because we don't want to change the head for each new node added.`
head=newNode;
}
}

但是在列表末尾添加每个newNode之后,我们退出该函数,那么当我们重新进入该函数并浏览链表以查看其结束位置时会发生什么? 它怎么知道cp-> next指向什么?

在列表末尾添加的每个newNode都会退出该函数,那么当我们重新进入该函数并浏览链表以查看其结束时会发生什么呢?

您的新newnode将添加到列表的末尾。 该指针是列表的一部分,而不是函数的局部指针。 因此,当您重新输入该功能时,先前添加的节点仍然存在。

它怎么知道cp-> next指向什么?

它知道在列表中存储该位置时所指向的位置。


动态分配时,分配的内存将保持分配状态,直到将其显式删除为止。 因此,数据的存在与指针或函数无关。

您应该记住的一件事是,指针总是按引用传递,而不是按值传递。 因此,只要您不释放指针所占用的内存,它们就将保持完整(请注意这一点)。 因此,当您重新输入该功能时,您始终可以参考已添加到链表中的节点。

但是,当程序退出或不需要它们时,应释放所有分配的指针。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM