私はK & Rを読んでいます。彼の後ろにいくつかのサンプルfopen
コードがあります。私は特に1つの部分を理解していません。ポインタ算術を理解する
#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でポインタの算術演算が許可されている可能性があります。ポインタ(ポインタ内の値)はメモリ内の位置を指定する整数と考えることができます。 2つの場所が隣接している場合、その住所の違いは数字です。 – StoryTeller
そのような式で配列を使用すると、最初の要素へのポインタに減衰します。 – Barmar
これは非常に基本的なポインタ演算です。それはすべてのCの本で説明されています。 – Olaf