ポインタ変数は1番最後にポインタ変数を使って文字列データを格納したメモリのアドレスを格納するために存在します。 そして文字列データをメモリに格納するためのポインタ変数名はなんでもよいのです

ポインタ変数hairetuは1番最後にポインタ変数hairetuを使ってデータを格納したメモリのアドレスを格納します。文字列データをメモリに格納するためのポインタ変数名はなんでもよいのです

ソーラー「どうやら


ポインタ変数の根本にして最大の特徴


が示されたわけだね。



配列ではできないことですが


ポインタ変数を用いれば


ポインタ変数名を変更しなくても同じポインタ変数名で


文字列データを

      

        💖どんどこどんどこ💖


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



アレサ「そう(*´▽`*)そうなのですの(´▽`*)/」


ソーラー「さっきのプログラムを見てよ。


#include <stdio.h>


int main(void){


char* hairetu="neko";


hairetu="nyao";

hairetu="myao";

hairetu="syao";

hairetu="cyao";


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


return 0;

}


コンパイル結果


EAZY IDECの場合

cyao


Visual Studioの場合

cyao


ソーラー


「このプログラムの


ポインタ変数宣言、初期化の命令文


char* hairetu="neko";


を分割して記述してみるとこうなるかな?

👇

char* hairetu;


hairetu="neko";

👆


hairetuのポインタ変数宣言


char* hairetu;


を実行し


ポインタ変数hairetuを作製してから


ポインタ変数hairetuに


文字列データ

"neko"


を格納しているね


つづけて


ポインタ変数hairetuに


文字列データ

"nyao"

"myao"

"syao"

"cyao"



を代入すると・・・



#include <stdio.h>


int main(void){


char* hairetu;


hairetu="neko";


hairetu="nyao";

hairetu="myao";

hairetu="syao";

hairetu="cyao";


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


return 0;

}


コンパイル結果


EAZY IDECの場合

cyao


Visual Studioの場合

cyao


ソーラー「


このプログラムが実行されると


文字列データ

"neko"

"nyao"

"myao"

"syao"

"cyao"


はすべて別々のメモリに格納されていたんだったね」


(もちろんプログラムの実行後はコンピュータのメモリから


文字列データ


"neko"

"nyao"

"myao"

"syao"

"cyao"


は消えてしまいます。


                 solarplexussより)


アレサ「つまり


ポインタ変数宣言

char* hairetu;


を行って


ポインタ変数hairetuを作製して


hairetu="neko";

hairetu="nyao";

hairetu="myao";

hairetu="syao";

hairetu="cyao";


のように


文字列データを代入していくと


💖どんぶらこどんどこ💖 💖どんぶらこどんどこ💖


       💖それぞれ別々のメモリに💖


文字列データ


"neko"

"nyao"

"myao"

"syao"

"cyao"


が格納されていくわけですね。


そして


最後にhairetu="cyao";


によって


文字列データ"cyao"が


メモリに格納されるのですが


その文字列データ"cyao"を格納したメモリ領域の先頭のメモリのアドレスが


ポインタ変数hairetuに格納されるのですの。」



ソーラー「ここで面白いと思うのは


ポインタ変数hairetuは


ポインタ変数名をhairetuから変えることなく


文字列データを別々のメモリに格納できるということだね。


だって

配列宣言

char hairetu[100]="neko";


を行って


さらに


文字列データ


"neko"

"nyao"

"myao"

"syao"

"cyao"

をメモリに格納する場合は


その都度

hairetuとは別の配列名を用いて


配列宣言,初期化


char nyaha[100]="neko";

char oh[100]="nyao";

char wao[100]="myao";

char myao[100]="syao";

char chyuu[100]="cyao";


を実行しなくちゃいけないものね


さらにいうと


文字列データをメモリに格納するのに


ポインタ変数名は何でもいいということなんだ


単に


ポインタ変数hairetuは


1番最後に


ポインタ変数hairetuをつかって


文字列データを格納したメモリ領域の先頭のメモリのアドレスを


格納するために存在しているんだね


だから必ずポインタ変数名をhairetuにする必要はなく


文字列データをメモリに格納するための


ポインタ変数名はなんでもよい


ということなんだ。


たとえば


ポインタ変数名をhairetuからaにかえて


先程のプログラムを実行しても


#include <stdio.h>


int main(void) {


char* a;


a = "neko";


a = "nyao";

a = "myao";

a = "syao";

a = "cyao";


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


return 0;

}


コンパイル結果


cyao


ソーラー「もちろん


別々のメモリに


文字列データ


"neko"

"nyao"

"myao"

"syao"

"cyao"


💖どんぶらこどんぶらこ💖


と格納できるし


さらに・・・」


アレサ「さらに😊・・・」


ソーラー「文字列データを格納するたびに


ポインタ変数を変更したりしなかったりすることもできるんだ。


#include <stdio.h>


int main(void) {


char* hairetu;


hairetu = "neke";


hairetu = "neko";


char* str;


str = "nyao";


char* ars;


ars = "myao";


char* sol;


sol = "syao";


char* arr;


arr = "cyao";


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

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

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

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

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


return 0;

}


コンパイル結果


neko

nyao

myao

syao

cyao


ソーラー「最後に文字列データを格納したメモリ領域の先頭のメモリのアドレスが


それぞれのポインタ変数に格納されるので


ポインタ変数hairetuには


文字列データ

"neke"

でなく


最後に

文字列データ

"neko"

を格納したメモリ領域の先頭のメモリのアドレスが


ポインタ変数strには

文字列データ

"nyao"

を格納したメモリ領域の先頭のメモリのアドレスが



ポインタ変数arsには

文字列データ

"myao"

を格納したメモリ領域の先頭のメモリのアドレスが



ポインタ変数solには

文字列データ

"syao"

を格納したメモリ領域の先頭のメモリのアドレスが



ポインタ変数arrには

文字列データ

"cyao"

を格納したメモリ領域の先頭のメモリのアドレスが



格納されることになるんだね。


ポインタ変数名がhairetuのままではできなかったけど


このようにポインタ変数名を


文字列データをメモリに格納するたびに


ちゃんと


hairetu

str

ars

sol

arr

と変更したなら


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

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

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

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

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


を実行して


neko

nyao

myao

syao

cyao

すべてを


コマンドプロンプト画面に表示することができるね。」



アレサ「ふう お見事です。ソーラーさん」


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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る