微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将双指针文件作为函数参数传递的意义何在?提供的示例

如何解决将双指针文件作为函数参数传递的意义何在?提供的示例

我知道一个指针的指针是另一个指针的地址。将文件的参数作为FILE *(* stream)而不是FILE * stream传递的确切原因是什么?如果有人可以向我解释为什么需要这样,以便我可以更好地理解为什么这样做,我将不胜感激。下面提供了示例代码

int SCAN(FILE * ( * stream)) {
  int totalsize = 0;
  int ch = 0;
  //count the number of lines in file
  do {
    ch = fgetc( * stream);
    if (ch == '\n') {
      totalsize++;
    }
  } while (ch != EOF);
  return totalsize;
}

解决方法

在这种情况下,这没有任何意义。如果要修改此指针引用的对象,则为必需。

例如:

int SCAN(FILE ** stream) {
  int totalsize = 0;
  int ch = 0;
  //count the number of lines in file
  *stream = fopen("myfile","rt");
  do {
    ch = fgetc( * stream);
    if (ch == '\n') {
      totalsize++;
    }
  } while (ch != EOF);
  return totalsize;
}
,

将双指针文件作为函数参数传递有什么意义?

SCAN()不需要。 int SCAN(FILE *)很好。 1


...为什么需要采用这种方式,以便我更好地理解其工作原理,...

常见用法不是由于SCAN()的实现,而是在相关功能之间保留了常见的签名样式。

请考虑以下内容。其他人可能会使用FILE *

的地址
int SCAN(FILE * ( * stream));
int OPEN(FILE * ( * stream),const char *name);
int CLOSE(FILE * ( * stream));
int THIS(FILE * ( * stream),int foo);
int THAT(FILE * ( * stream),int bar);

另一方面,原始编码器可能已经熬夜了。


1 由于文件行可以超过INT_MAX,我会使用更宽的返回类型。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。