freopen(const char *, const char *, FILE *),最后一个参数为什么不是FILE **类型?

在学数据结构时,书上讲当函数要改变指针变量参数的值时,需要用指向指针的指针作为函数参数。文件重定向函数freopen(const char *, const char *, FILE *),最后一个参数为什么不是FILE **类型?

freopen 是库函数,它的函数原型就是:
FILE * freopen ( const char * filename, const char * mode, FILE *stream );
参数3指向一个文件结构(FILE 是系统定义的文件结构,FILE * 是指针)。不需要FILE **。

调用的例子:
#include <stdio.h>
int main ()
{
freopen ("myfile.txt","w",stdout);
printf ("This sentence is redirected to a file.");
fclose (stdout);
return 0;
}

函数的作用是 把 标准输出设备stdout 转向到 一个磁盘文件 myfile.txt, 按写的方法"w" 打开。追问

在FILE * freopen ( const char * filename, const char * mode, FILE *stream )中,stream是指针,函数执行后stream的值会改变,也就是重定向了。一个指针参数的改变不是应该用FILE **类型吗?谢谢你的耐心回复!

追答

FILE *stream 是形式参数,函数执行后,它对应的实际参数值可以改变(也可以不改变),结果可以带回调用处。
FILE * freopen, 参数3指向一个文件结构,而不是指向许多文件结构,没有必要用FILE **。

再说一遍,这个函数是系统函数,是完全正确的函数。它用的是FILE *,不是FILE **。

再写个调用的例子:
#include
int main ()
{
int a,b,c;
freopen ("myfile2.txt","r",stdin);
scanf("%d %d %d",&a,&b,&c); // 从myfile2.txt读入数据
fclose (stdin);
return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-06
操作系统用一个结构FILE来打开文件,这个结构中记录打开文件的信息及当前操作信息。
当使用freopen时,最后提供的这个指向该结构的指针不会改变,函数改变的是结构中
的内容,这个指针仍然指向这个结构,所以不需要用FILE **。
相似回答