【问题标题】:Is this the correct syntax for passing a file pointer by reference?这是通过引用传递文件指针的正确语法吗?
【发布时间】:2011-03-14 22:41:22
【问题描述】:

这是通过引用传递文件指针的正确语法吗?

函数调用:printNew(&fpt);

printNew(FILE **fpt)
{        
   //change to fpt in here kept after function exits?
}

【问题讨论】:

  • 你如何定义“变化”?是保留文件句柄状态的想法,还是 printNew 能够返回新打开的文件句柄?
  • 您的代码中没有引用。也许您的意思是 C 作为语言? (通常你会想要使用某种fstream,而不是FILE* 的东西。)这不是C++ 式的代码。
  • @jdv:是的,一个新打开的文件句柄
  • 但是你的问题还不清楚,因为 C 没有引用。 :/ 我的意思是对术语或风格的澄清。

标签: c++ pointers variables reference pass-by-reference


【解决方案1】:

没有。正确的语法是

void printNew(FILE *&fpt)
{        
   //change to fpt in here kept after function exits?
}

您的代码只会将本地指针更改为 FILE 指针。调用者在您的代码中只能看到对 *fpt 的更改。如果您将其更改为上述内容,则通过引用传递事物并按预期进行更改。对应的参数照常传递

printNew(fpt);

【讨论】:

  • @Tommy 您接受这个(对于 c++ 是正确的)答案让我们不清楚这个问题实际上是关于 C++ 还是 C。
  • @Tommy 为什么你接受了我的回答,却将你的问题重新标记为 C?这对我来说毫无意义。
【解决方案2】:

我很想知道你将如何处理那个文件指针——你在打开指针上做的正常事情是调用 fgets() 之类的函数并用 fclose() 关闭它,这些都不需要参考。

【讨论】:

  • 关闭文件,然后用该指针打开一个新文件。不需要参考?
  • @Tommy 如果您需要在函数返回后可以访问新打开的文件,那么可以。但我想我可能会让函数返回新指针作为它的返回值。
  • @Tommy 我的意思当然是 - “那么是的,需要参考”。但我还是更喜欢返回值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-26
  • 2012-01-16
  • 1970-01-01
  • 2014-07-27
  • 2023-03-03
  • 1970-01-01
相关资源
最近更新 更多