【发布时间】:2017-03-05 21:37:28
【问题描述】:
我正在阅读 K&R C。在后面有一些示例 fopen 代码。有一部分我不是特别明白。
#define OPEN_MAX 20
FILE _iob[OPEN_MAX] = {
{ 0, NULL, NULL, _READ, 0 }, // _READ = 01
{ 0, NULL, NULL, _WRITE, 1 }, // _WRITE = 02
{ 0, NULL, NULL, _WRITE | _UNBUF, 2 } // _UNBUF = 04
};
FILE *fopen(char *name, char *mode)
{
FILE *fp;
for (fp = _iob; fp < _iob + OPEN_MAX; fp++)
/* ... */
}
fp < _iob + OPEN_MAX 的声明让我大吃一惊。
-
fp:文件指针 -
_iob: 文件数组 -
OPEN_MAX:整数
这似乎是添加一个文件数组到一个整数,然后评估它是否大于一个文件指针! fp < _iob + OPEN_MAX这句话怎么可能?
【问题讨论】:
-
这可能是因为 C 中允许使用指针运算。您可以将地址(指针内的值)视为指定内存中位置的整数。如果两个位置相邻,则它们的地址之间的差异是一个数字。
-
当你在这样的表达式中使用数组时,它会衰减为指向第一个元素的指针。
-
这是非常基本的指针算法。每本 C 书都有解释。
标签: c arrays pointers operators fopen