【发布时间】:2022-01-16 11:17:53
【问题描述】:
所以我声明了一个FILE 类型的指针*f,现在我说该指针等于fopen("text.txt", "r")。那么既然指针存储了一个地址,那么fopen是不是返回了一个文件的地址呢?
FILE *f;
f = fopen("text.txt","r");
【问题讨论】:
-
C11 7.2.1 "标题
<stdio.h>声明了FILE类型,它是一种能够记录控制流所需的所有信息的对象类型,包括它的文件位置指示符、指向它的指针关联缓冲区(如果有的话),一个记录是否发生读/写错误的错误指示器,以及一个记录是否到达文件末尾的文件结束指示器”(我做了一些小编辑) -
不是文件本身的地址,而是描述文件的一些东西的地址。不过,它是一个指针并不重要。取消引用它没有任何意义,你所做的只是将它传递给处理文件的标准函数。
-
它返回一个内存数据结构的地址,其中包含与文件和打开相关的数据,例如文件名、打开方式、当前文件指针(文件中的相对地址等) .
-
它是否是一个地址并不重要,因为无论如何你都不打算取消引用它。因为它有一个
*,所以它在技术上是一个指针,但就你所知,它可能是也可能不是转换为指针的整数(或不是)。 -
“为什么文件类型不透明” 因为您的目的是将其传递给标准函数,而不是取消引用它。无法取消引用 = 不透明。