C语言 文件类型指针问题?

FILE是结构体类型数据,为什么定义一个文件指针只需要 FILE *fp;而不需要先定义一个FILE类型的变量,如FILE file_test ; 然后再将其指向files_test 即fp=&file_test ;

要操作文件,首先得打开文件吧,fopen函数就是打开文件的,函数内部动态生成一个FILE struct,然后和某磁盘文件挂钩,返回其地址,不需要你自己操作FILE struct

如果非要不调用已有的文件操作库函数打开文件,必须知道这个编译器操作FILE struct的相关细节,这是vc++的 FILE结构
struct _iobuf {
char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;
要和一个文件关联,要了解这么多字段的细节,还涉及到底层的物理磁盘读写,而且不同的编译器实现可能是不一样的,所以自己操作FILE struct实际上就是自己写一套文件操作函数,所以说不现实。既然不现实,那就用库函数,那么看看你这个操作:
FILE file_test;
FILE* fp=&file_test;
fp=fopen(.....); //fp指向另外一个地方了,file_test多余了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-03-30
FILE* fp定义的指针变量fp通常都是由调用fopen()函数而获得其返回值。
fopen()函数的原型如下:
FILE * fopen(const char * path,const char * mode);

使用指针变量需要关心其指向地址问题,如果指针变量没有指向确定的地址,直接使用指针变量出导致出现错误。
调用fopen()函数时,该函数会返回文件的开始地址,执行fp = fopen(...)后,fp自然就会指向该文件的开始地址。故不用先将fp指向其他变量,再获得fopen()函数的返回值。
第2个回答  2020-03-30
fopen() 返回的是一个地址,FILE *fp = fopen(...); 就做了你说的这个事
相似回答