如何解决将双指针文件作为函数参数传递的意义何在?提供的示例
我知道一个指针的指针是另一个指针的地址。将文件的参数作为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 举报,一经查实,本站将立刻删除。