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

ソーラー「どうやら


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


が示されたわけだね。



配列と違いポインタ変数はポインタ変数名を変更しなくても文字列データを

     


        💖どんどこどんどこ💖



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



マックス「そ、そうだったのか」


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



#include <iostream>


using namespace std;


int main() {


char* hairetu="neko";


hairetu="nyao";

hairetu="myao";

hairetu="syao";

hairetu="cyao";


cout << hairetu << "\n";


return 0;


}


ビルド実行結果


cyao



ソーラー


「このプログラムの


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


char *hairetu="neko";


ポインタ変数宣言と初期化


を分割して記述してみると次のプログラムのようになるかな?


hairetuのポインタ変数宣言


char* hairetu;


を実行し


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


ポインタ変数hairetuに


文字列データ


"neko"

"nyao"

"myao"

"syao"

"cyao"


を代入するわけだね。


#include <iostream>


using namespace std;


int main() {

char* hairetu;

hairetu = "neko";

hairetu = "nyao";

hairetu = "myao";

hairetu = "syao";

hairetu = "cyao";


cout << hairetu << "\n";


return 0;


}


ビルド実行結果


cyao


ソーラー「


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


文字列データ

"nyao"

"myao"

"syao"

"cyao"


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


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


文字列データ

"nyao"

"myao"

"syao"

"cyao"


は消えてしまいます。


                 solarplexussより)



てんC「つまり


ポインタ変数宣言


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 <iostream>


using namespace std;


int main() {

char* a;

a = "neko";

a = "nyao";

a = "myao";

a = "syao";

a = "cyao";


cout <<a<< "\n";


return 0;


}


ビルド実行結果


cyao


ソーラー「もちろん


このプログラムでも


メモリに


文字列データ


"neko";

"nyao";

"myao";

"syao";

"cyao";



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


と格納できるし


さらに・・・」


マックス「さらに😊・・・」


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


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


#include <iostream>


using namespace std;


int main() {



char* hairetu;

hairetu = "neke";

hairetu = "neko";


char* str;

str = "nyao";


char* ars;

ars = "myao";


char* sol;

sol = "syao";


char* arr;

arr = "cyao";


cout <<hairetu<< "\n";

cout <<str<< "\n";

cout <<ars<< "\n";

cout <<sol<< "\n";

cout <<arr<< "\n";


return 0;


}


ビルド実行結果


neko

nyao

myao

syao

cyao


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


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


ポインタ変数hairetuには


文字列データ


"neke"


でなく


最後に


文字列データ


"neko"


を格納したメモリのアドレスが


ポインタ変数strには


文字列データ


"nyao"


を格納したメモリのアドレスが


ポインタ変数arsには


文字列データ


"myao"


を格納したメモリのアドレスが


ポインタ変数solには


文字列データ


"syao"


を格納したメモリのアドレスが


ポインタ変数arrには


文字列データ


"cyao"


を格納したメモリのアドレスが


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


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


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


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


ちゃんと


hairetu

str

ars

sol

arr


と変更したなら


cout << hairetu << "\n";

cout << str << "\n";

cout << ars << "\n";

cout << sol << "\n";

cout << arr << "\n";


を実行して


neko

nyao

myao

syao

cyao


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



てんC「お見事です。ソーラーさん」


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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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