使用指向FILE类型的const指针是否是合理的做法?
关于
FILE* const在C文件I/O中的使用 当然可以将const指针特性应用在FILE*上,你的测试代码完全有效,而且这是个很实用的用法!
先搞懂FILE* const的本质
FILE* const代表的是指向FILE对象的常量指针:
- 指针变量本身的取值(也就是
file这个变量存储的地址)不能被修改——你没法给它重新赋值成另一个文件指针; - 但它指向的FILE对象内部的数据是可以被修改的,而标准库的文件I/O函数(比如
fprintf、fclose这类)本来就只需要操作FILE对象的内容,并不会修改传入的指针变量本身,所以完全兼容这种写法。
你的测试代码分析
你写的这段代码是完全正确的:
#include <stdio.h> int main(void) { FILE* const file = fopen("somefile.txt", "w"); if (file != NULL) { fprintf(file, "%s\n", "So this works? That's just swell!"); } return 0; }
当fopen成功打开文件后,file作为常量指针传入fprintf,函数可以正常通过它访问并操作FILE对象完成写入。而且因为file是const指针,你不用担心后续代码里不小心给它重新赋值(比如误写file = fopen("other.txt", "r")),能让代码更健壮。
别搞混两种const指针
这里要区分开FILE* const和const FILE*:后者是指向常量FILE对象的指针,这种情况下就不能传给fprintf这类会修改FILE对象的函数了——但FILE* const和它是完全不同的概念,别搞混哦!
内容的提问来源于stack exchange,提问作者saxbophone
相关产品推荐
相关产品推荐

