c - 动态指针操作 C 编程

标签 c function pointers dynamic free

我想更好地掌握动态指针。

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

   }
   */

}

问题:

  1. 当我通过*pt时到一个函数,它会自动更新 *pt主要还是我需要返回 *pt从函数中做到这一点?

  2. 如果我释放*tempPt在函数中它也是免费的*pt

  3. 如果我 malloc *tempPt函数内部,函数结束后它指向的数据会自动释放吗?

  4. 这个问题可以从前面的问题间接回答,但是我如何创建一个 *tempPt并在循环中释放它而不释放 *pt以便可以重复该过程?

编辑问题 4:也许我想要做的一个更具体的例子可以澄清这个问题。我正在运行基本的启发式算法。将指针传递给函数后,我操作数据,然后运行算法并使用 *tempPt 指向它。如果 *tempPt 的数据比 *pt 的数据更优化,我想用 *tempPt 的数据更新 *pt。

最佳答案

  1. 如果您更改 pt 指向的内存地址(就像在包含的函数中那样),它不会更新主函数中指针指向的内存地址。但是,如果您更改该内存地址处的数据,则主函数中的 pt 也将指向已更改的数据。
  2. 是的,因为它们都指向相同的基础数据。
  3. 不可以,C 没有自动垃圾回收功能,因此在堆上声明的任何内存都必须显式释放。
  4. 我有点不确定你在问什么。如果您释放 tempPtpt 将成为您所显示的代码中的悬空指针,因为它们都指向相同的基础数据。因此,如果temptPt == pt,则不可能在不释放pt指向的数据的情况下释放tempPt指向的数据,如下所示:他们都指向同一件事。

关于c - 动态指针操作 C 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36438928/

相关文章:

c - 为什么通过 SPI 将 CMD58 发送到我的 Class 10 SD 返回 0x01 而不是 0x00?

javascript - 函数按值返回函数

c++ - 为什么在这种情况下指针变慢

c - SetWindowsHookEx 运行返回 NULL

c - OpenCV,cvCvtColor : null array pointer is passed in function cvgetmat

javascript - 如何创建包含变量输入的函数的变量

c++ - 通过子 vector 指针/ View /引用更新 vector

c - 函数调用结束时的数组销毁

c - GDB 不会立即中断程序

PHP:查找字符串或数组中出现最频繁的单词