C语言 ,FILE 为什么要用指针 ?

学了oop,今天忽然想起c。。。FILE不是一个struct么?里面包含了已经包含了指向缓冲区的指针,以及各种有关的信息。
为什么各种函数都用FILE* 呢?不应该是性能的因素吧?struct 是值传递,但是它一点都不大呀。

速度嘛,还是有区别的,再者说了,也有其他理由

先说速度,指针肯定比struct快的,假设struct首先肯定比一个指针大对吧?一点点,你觉得没区别,那么假设大小就差两倍,那么一万次复制呢?一亿次复制呢?你玩小游戏延迟1秒觉得可能就很卡了,如果加倍变成2秒呢?显然还是有区别的。

第二,再说其他理由,文件是什么,文件是一个文件对象,文件有几个?文件肯定只有一个对吧,但是你要是允许struct复制,那么要是两个进程或者两个线程,哪怕是两个函数,同时操作一个文件的时候怎么办?如果是指针,那么我们知道是两个函数同时操作一个指针指向的对象,如果是结构体呢?那哪个才是真的?变成两个文件了?如果一个函数对结构体进行修改,另一个怎么办?

这些种种问题,所以FILE要是一个指针

还有哦,比如说FILE这个结构体里面的内容肯定是要被修改的是吧,C语言又不象C++有引用,你穿过去一个结构体复制进取,那么调用这个函数的函数又怎么知道你修改了呢?再返回?那无形中又一次复制操作,又要浪费一次时间,所以不用指针浪费的时间可能不只双倍,四倍,甚至更多倍吧
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-17
呵呵,喜欢思考,不错。

不过,有人已经先回答了。
其实,C语言的指针就是C++的引用,没有保护而已。
如果传递struct,那不就是一个类似const FILE *的效果吗?传进去的东西不能改。
但是文件往往是需要修改的,比如,你使用fprintf,打印完成了,不是需要修改文件指针么。

再说说你说的速度问题,C语言是为了写操作系统设计的,这个速度一定要考虑的。虽然FILE操作本身比较慢,这个快了一些也没什么感觉,但是究竟能快多少呢?
保守的说就这一个动作,快上几十倍!
如果参数传递的是一个数据结构,必须复制这个数据结构,复制数据结构需要长度,这需要一个循环才能完成,或者事先数好生成很多类似的语句,在这个过程中需要内存、寄存器、TLB……。
如果是一个指针呢?可以直接压栈,甚至直接就是一个寄存器。

不考虑速度,还要考虑空间,PC机的内存论G好像不明显,如果只有8K内存的计算机呢?那可是不得了的事情了。C语言诞生的年代,内存条还是论K的年代,这个能不考虑吗?

也正是因为C语言的这些考虑,速度、空间等方面的不断优化,才使C语言成为了少数使用时间很长的经典语言。即使在现在,也没有几种语言能够替代C语言编写操作系统。

想起早年的一本计算机图书,最后写道 “听说Intel即将推出4KB的内存,那时计算将进入到一个新的时代。”
其实,当年的超级马里奥所用的红白机也只有2K的内存,内存比金子都要贵……
第2个回答  2012-05-17
习惯罢了。
FILE是一个struct.
fopen 返回FILE 指针。 读写语句 流向 要用到这个指针。
声明为 非指针也可以,读写时要做地址运算。
读写操作是计算机中最慢的操作。用指针可以快一些。由于读写常要做很多次,加起来,节省多些。
第3个回答  2012-05-17
速度快!追问

您还真够快也。。。刚提问就有了。
速度快?但是好像至不至于吧?
就像int 和int* 作为参数传递的时候,速度没区别。拷贝一个FILE 结构体应该不会慢到哪去吧?里面只是些short啊,unsigned啊,指针啊什么的。。。文件内容又没放里面

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网