我想更好地掌握动态指针。
int main(){
// allocate pointer
randomStructure *pt = (randomStructure *)malloc(sizeof(randomStructure));
// arbitrary code that manipulates data that *pt points to.
// function call
function(pt);
return 0;
}
void function(randomStructure *pt){
randomStructure *tempPt = (randomStructure *)malloc(sizeof(randomStructure));
// arbitrary code that manipulates data that *tempPt points to.
pt = tempPt;
//free(tempPt); Question2
/* Question 4
while(index){
randomStructure *tempPt = (randomStructure *)malloc(sizeof(randomStructure));
}
*/
}
问题:
当我通过
*pt
时到一个函数,它会自动更新*pt
主要还是我需要返回*pt
从函数中做到这一点?如果我释放
*tempPt
在函数中它也是免费的*pt
?如果我 malloc
*tempPt
函数内部,函数结束后它指向的数据会自动释放吗?这个问题可以从前面的问题间接回答,但是我如何创建一个
*tempPt
并在循环中释放它而不释放*pt
以便可以重复该过程?
编辑问题 4:也许我想要做的一个更具体的例子可以澄清这个问题。我正在运行基本的启发式算法。将指针传递给函数后,我操作数据,然后运行算法并使用 *tempPt 指向它。如果 *tempPt 的数据比 *pt 的数据更优化,我想用 *tempPt 的数据更新 *pt。
最佳答案
- 如果您更改
pt
指向的内存地址(就像在包含的函数中那样),它不会更新主函数中指针指向的内存地址。但是,如果您更改该内存地址处的数据,则主函数中的pt
也将指向已更改的数据。 - 是的,因为它们都指向相同的基础数据。
- 不可以,C 没有自动垃圾回收功能,因此在堆上声明的任何内存都必须显式释放。
- 我有点不确定你在问什么。如果您释放
tempPt
,pt
将成为您所显示的代码中的悬空指针,因为它们都指向相同的基础数据。因此,如果temptPt == pt
,则不可能在不释放pt
指向的数据的情况下释放tempPt
指向的数据,如下所示:他们都指向同一件事。
关于c - 动态指针操作 C 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36438928/