gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:57:01 25 4
gpt4 key购买 nike

当你有一个指针从一个指针结构指向另一个已分配内存的结构时,函数调用后会发生什么?我之前问了一个关于导致我问这个问题的结构的问题: scope of struct pointers in functions

例如:

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

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

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;
}
}

但是在列表末尾添加每个新节点后,我们退出该函数,那么当我们重新进入该函数并遍历链表以查看它在哪里结束时会发生什么?它怎么知道 cp->next 指向什么?

最佳答案

each newNode added at the end of the list we exit the function so what happens when we re-enter the function and go through the linkedlist to see where it ended?

您的 newnode 被添加到列表的末尾。该指针是列表的一部分,不属于您的函数。因此,当您重新输入函数时,之前添加的节点仍然存在。

How does it know what cp->next points to?

当位置存储在您的列表中时,它知道指向的位置。


在动态分配中,分配的内存会保持分配状态,直到它被显式删除。因此,您的数据的存在独立于指针或函数。

关于c - 函数调用后指针会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15540838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com