🌻天国にいけるC++言語入門🌻 進化し続けるオブジェクト指向プログラミング ver3.2307
ポインタ変数hairetuは1番最後にポインタ変数hairetuを使ってデータを格納したメモリのアドレスを格納します。文字列データをメモリに格納するためのポインタ変数名はなんでもよいのです
ポインタ変数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「お見事です。ソーラーさん」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます