ファイルポインタ変数fpはポインタ変数なのでポインタ変数名fpのままでどんどん文字列をメモリに格納していくことができます

ファイルポインタ変数とポインタ変数の違いは何でしょうか😊

ソーラー「ちょっと以前のエピソードで


ポインタ変数を使って


たくさんの文字列データを


メモリに格納することができたね


そのプログラムは次のようになっていたね。


#include <stdio.h>


int main(void){


char *hairetu="neko";

hairetu="nyao";

hairetu="myao";

hairetu="syao";

hairetu="cyao";

printf("%s\n",hairetu);


return 0;

}


コンパイル結果

cyao


🌻これはなに? どうなってるの?🌻


ソーラー「ふふ


これはね


ポインタ変数の凄さをあらわしているプログラムなんだ。」


🌻ポインタ変数の凄さ?


なに? なに?


🌻


このプログラムでは


同じポインタ変数名hairetuをつかってはいるけど


文字列データ

"neko"

"nyao"

"myao"

"syao"

"cyao"

すべて

上書きなどして消去されることなく

メモリ内に保存されいくんだ


つまり


      同じポインタ変数名hairetuを


       つかっているにもかかわらず


どんどん


文字列データ

"neko"

"nyao"

"myao"

"syao"

"cyao"


新たな文字列データが


別べつのメモリに


格納されていくんだよ」


🌻そ、そうなの🌼


ソーラー「


このとき


1番最後にメモリに格納された🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓



文字列データ"cyao"を格納しているメモリのアドレス🍓🍓🍓🍓🍓🍓🍓


ポインタ変数hairetu🍓🍓🍓🍓🍓🍓🍓


に格納されてるんだよ」


🌻ほおお🌼


ソーラー「


      🌞 同じポインタ変数名hairetuをつかって     🌞

      🌞どんどん文字列データを別々のメモリに格納でき   🌞

      🌞 1番最後にメモリに格納された文字列データを 🌞 

      🌞 格納しているメモリのアドレスが     🌞  

      🌞 ポインタ変数であるhairetuに格納される。  🌞



ここがポインタ変数を使ってメモリにデータをとりこむときの


根本にして最大の特徴なんだね。


ハードディスクにデータを保存するのに


なぜ

ファイルポインタ変数fpが使用されているかの秘密がここにあります。


ハードディスクにデータを保存するとき


保存したいデータは


🍓🍓🍓まずファイル構造体を通してメモリに格納されてから🍓🍓🍓


ハードディスクにデータは保存されます。


ハードディスクに保存されたデータを読み取って


コマンドプロンプト画面に表示するときは


ハードディスクに保存されたデータは


🍓🍓🍓まずファイル構造体を通してメモリに格納されます🍓🍓🍓


そうしてメモリに格納されたデータをprintf関数などを使って


コマンドプロンプト画面に表示しています。


ハードディスクにデータを保存するときも


ハードディスクに保存されたデータを読み取るときも


ファイル構造体を通してメモリに


どんどこデータは格納されていくのですが


そのときファイルポインタ変数fpが使用されます。


ポインタ変数は



      🌞 同じポインタ変数名hairetuをつかって     🌞

      🌞どんどん文字列データを別々のメモリに格納でき   🌞

      🌞 1番最後にメモリに格納された文字列データを 🌞 

      🌞 格納しているメモリのアドレスが      🌞

      🌞 ポインタ変数であるhairetuに格納される。  🌞


のような特徴をもっていますが


ファイルポインタ変数fpは


つぎのような特徴をもっています


その仕組みとは


     🌞同じファイルポインタ変数名fpをつかって🌞

     🌞どんどん文字列データを別々のメモリに格納でき🌞 

  

           🌞なおかつ🌞


🌞ファイルポインタ変数fpに格納されている値は変化しません🌞


つまり


ファイルポインタ変数fpに格納されている値すなわちアドレスは


ずっと変化しないのです



別の言い方をすれば


どんどんメモリにデータが格納されているにもかかわらず


ファイルポインタ変数fpはずっと1つの同じメモリのアドレスを


保持し続けているのです


それなのに


どんどんデータを別々のメモリに格納できるのです


ファイルポインタ変数fpはすごいですね


ただし


ファイルポインタ変数fpに格納されているアドレスは


ずっと変化しないんですが・・・


ファイルポインタ変数fpに格納されているアドレスの


メモリに格納されているデータは


新しいデータがメモリに保存されるごとに


どんどん変化していきます


ファイルポインタ変数fpに格納されているアドレスのメモリに格納されているデータは


*fpであらわされるので


新しいデータがメモリに保存されるごとに


*fpの値は変化していくことになります


ファイルポインタ変数とポインタ変数の違いは


こんなところかな」


🌻  🌻


なんで すごい


そんなことしってたんだ


🌼  🌼


ソーラー「


というわけで


ファイルポインタ変数fpは


ファイルポインタ変数名fpを


変更することなく


別べつのメモリにつぎつぎとデータを格納することができるのです。


配列を用いるなら違うデータをメモリに格納するごとに


配列名を変更する必要があります。



🌻  🌻


ファイルポインタ変数fpは


ずっと同じアドレスを格納し続けている・・


ということは たとえば


ハードディスク内のデータをファイル構造体を通してメモリに


読込むとき


そのアドレスのメモリに1まとめに


ハードディスク内のデータが集められるということかな?


そしてデータが格納されるごとに


f*


つまり


ポインタ変数fに格納されているアドレスのメモリに


格納されているデータが変化していくということかな?


🌼




  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます