-1

ポインターは、別の変数のアドレスを格納する変数であることを知っています。それで、char型ポインター、整数型ポインター、ポインターに1を追加するとどうなるかなどの概念を理解しましたが、ファイルポインターの背後にある実際の概念はわかりませんでした。文字データ型の場合のように直接指定できないのはなぜですか? たとえば、コンテンツを含むファイルを考えてみましょう:

Hello World
fantastic

'ptr' がこのファイルを指すようにします。ptr という技法を使用して、「H」、(ptr+1) から「e」、(ptr+2) から「l」などを指すことができないのはなぜですか。私の質問がばかげている場合は、本当の概念を理解すれば明らかになることがあります。文字列がメモリに格納されるのと同じように、このファイルは実際にはメモリに格納されると思います。(私は fscanf() 関数とすべてを知っています)

4

4 に答える 4

0

ptr+1 がファイルの 2 番目の文字を与えるとは思わない基本的な理由は、一般に、C ではポインター演算が 1 バイトではなく 1 つのオブジェクトで移動するためだと思います。したがって、ptr+1 が「次の」ファイルを指すことを期待します。

また、ファイルは通常、メモリではなくディスクに保存されます。

于 2014-01-05T16:07:10.687 に答える
0

ファイルはメモリに保存されません。開いたときにメモリ (またはその一部) を呼び出すことができます。ファイルはプログラムのデータの一部ではなく、オペレーティング システムの助けを借りて使用できる単なるエンティティです。

メモリ内の通常の文字配列と比較すると、背後にあるファイルがはるかに多くなります。ファイルからの読み取りとファイルへの書き込みは通常、バッファリングされます。これはFILE、ファイルに対する操作を呼び出すことができる標準 C ライブラリ構造によって処理されます。

そして、「ファイルへのポインタ」を持っているとはどういう意味でしょうか? ptr+1多くの理由から、ファイル全体をスキャンすることは適切な選択ではありません。バイナリデータの場合、正確に何を期待していますptr+1か? 一度に 1 行ずつなど、より大きなデータのチャンクを読み取りたい場合はどうすればよいでしょうか?

ご覧のとおり、この選択にはいくつかの理由があります。主な理由は、ファイルが通常の変数のようにプログラムのアドレス空間のメモリに配置されていないことです。ファイルとカーソル位置を記述する構造は、最も一般的なアプローチです。

注意すべきもう 1 つの重要な点は、 のセマンティクスはptr+1言語の組み込み型に対してのみ意味があるということです。ファイルは組み込みタイプではなく、そうであっても意味がありません。

于 2014-01-05T16:07:37.910 に答える
0

C言語の文脈で話していると思います。いいえ、ファイルは実際にはメモリに保存されません。ファイル ポインターは、たとえば、そのファイルの読み取りの進行状況を示すポインター/矢印と考えてください。つまり、ここで読み取り操作を行うと、ポインターは、このファイルから読み取る char/int など、つまり現在の場所を示します。これがポインタの目的です。これは、これを大まかに非公式に説明する私の方法です。

于 2014-01-05T15:38:30.037 に答える