-2
我正在通過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.你能想到的地址(內部指針的值)爲指定的內存位置的整數。如果兩個地點相鄰,地址之間的差異是一個數字。 – StoryTeller
在類似的表達式中使用數組時,它將衰減爲指向第一個元素的指針。 – Barmar
這是非常基本的指針算術。這在每本C書中都有解釋。 – Olaf