天国にいけるC言語入門 ヘキサ構造体 ver3.2128
ポインタ変数をつかって文字列データがメモリに格納されたとき最後に文字列データが格納されたメモリのアドレスがポインタ変数に代入されます その様子を観察してみましょう🍓
ポインタ変数をつかって文字列データがメモリに格納されたとき最後に文字列データが格納されたメモリのアドレスがポインタ変数に代入されます その様子を観察してみましょう🍓
Visual Studio2019以降のヴァージョンではポインタ変数を使って文字列データをメモリに格納する機能は削除されています ご注意ください
ソーラー「さあ、それでは
ポインタ変数をつかって文字列データがメモリに格納されたとき
最後に文字列データが格納されたメモリ領域の先頭のメモリのアドレスが
ポインタ変数に代入されるんだけど
その様子を観察してみよう。
アレサ ポインタ変数稼働だ」
#include <stdio.h>
int main(void) {
char* hairetu ;
hairetu = "neko";
printf("%s\n", hairetu);
printf("%p\n", hairetu);
hairetu = "nyao";
printf("%s\n", hairetu);
printf("%p\n", hairetu);
hairetu = "myao";
printf("%s\n", hairetu);
printf("%p\n", hairetu);
hairetu = "syao";
printf("%s\n", hairetu);
printf("%p\n", hairetu);
hairetu = "cyao";
printf("%s\n", hairetu);
printf("%p\n", hairetu);
return 0;
}
コンパイル結果
EAZY IDECの場合
neko
00402000
nyao
0040200D
myao
0040201A
syao
00402027
cyao
00402034
Visual Studioの場合
ビルド実行結果
neko
000F7CE0
nyao
000F7BE0
myao
000F7BE8
syao
000F7BF0
cyao
000F7B34
ソーラー「このプログラムでは
まず
hairetuのchar*型のポインタ変数宣言
char* hairetu;
により
ポインタ変数hairetuが作成されています
そして
ポインタ変数hairetuをつかって文字列データがメモリに格納されたとき
最後に文字列データが格納されたメモリ領域の先頭のメモリのアドレスが
ポインタ変数hairetuに格納されるので
(Visual Studioの場合)
hairetu = "neko";
のように
文字列データ"neko"が
ポインタ変数hairetuに代入されたなら
実際には
文字列データ"neko"が格納されたメモリ領域の先頭のメモリのアドレスが
ポインタ変数hairetuに格納されるので
printf("%s\n", hairetu);
が実行されると
nekoがコマンドプロンプト画面に表示され
printf("%p\n", hairetu);
が実行されると
文字列データ"neko"が格納されたメモリ領域の先頭のメモリのアドレス
000F7CE0
が
コマンドプロンプト画面に表示されます。
次に
hairetu = "nyao";
のように
文字列データ"nyao"が
ポインタ変数hairetuに代入されたなら
文字列データ"nyao"が格納されたメモリ領域の先頭のメモリのアドレスが
ポインタ変数hairetuに格納されるので
printf("%s\n", hairetu);
が実行されると
nyaoがコマンドプロンプト画面に表示され
printf("%p\n", hairetu);
が実行されると
文字列データ"nyao"が格納されたメモリ領域の先頭のメモリのアドレス
000F7BE0
が
コマンドプロンプト画面に表示されます。
次に
hairetu = "myao";
のように
文字列データ"myao"が
ポインタ変数hairetuに格納されたなら
文字列データ"myao"が格納されたメモリ領域の先頭のメモリのアドレスが
ポインタ変数hairetuに格納されるので
printf("%s\n", hairetu);
が実行されると
myaoがコマンドプロンプト画面に表示され
printf("%p\n", hairetu);
が実行されると
文字列データ"myao"が格納されたメモリ領域の先頭のメモリのアドレス
000F7BE8
がコマンドプロンプト画面に表示されます。
次に
hairetu = "syao";
のように
文字列データ"syao"が
ポインタ変数hairetuに代入されたなら
文字列データ"syao"が格納されたメモリ領域の先頭のメモリのアドレスが
ポインタ変数hairetuに格納されるので
printf("%s\n", hairetu);
が実行されると
syaoがコマンドプロンプト画面に表示され
printf("%p\n", hairetu);
が実行されると
文字列データ"syao"が格納されたメモリ領域の先頭のメモリのアドレスが
000F7BF0
が
コマンドプロンプト画面に表示されます。
次に
hairetu = "cyao";
のように
文字列データ"cyao"が
ポインタ変数hairetuに格納されたなら
文字列データ"cyao"がが格納されたメモリ領域の先頭のメモリのアドレスが
ポインタ変数hairetuに格納されるので
printf("%s\n", hairetu);
が実行されると
cyaoがコマンドプロンプト画面に表示され
printf("%p\n", hairetu);
が実行されると
文字列データ"cyao"が格納されたメモリ領域の先頭のメモリのアドレスが
000F7834
がコマンドプロンプト画面に表示されます。」
ソーラー「ねえ、アレサ
ポインタ変数hairetuをつかって
文字列データ
"neko"
"nyao"
"myao"
"syao"
"cyao"
を
どんどこメモリに格納したんだけど
文字列データ
"neko"
"nyao"
"myao"
"syao"
"cyao"
を格納しているメモリのアドレスは
000F7CE0
000F7BE0
000F7BE8
000F7BF0
000F7B34
となっていて
全然順序良く並んでいないね。
000F7CE0より256小さい数値が
000F7BE0で
000F7BE0より8大きい数値が
000F7BE8で
000F7BE8より8大きい数値が
000F7BF0で
000F7BF0より188小さい数値が
000F7B34
となっているね。
(´▽`*)/
ははっ
本当に
どんどこ
適当に
文字列データ
"neko"
"nyao"
"myao"
"syao"
"cyao"
をメモリに格納したみたいだ。」
アレサ「統合開発環境Visual Studioでは
同じ名前で配列宣言を行うことができないので
できませんが
統合開発環境EAZY IDECをもちいて
char hairetu[]を使って
文字列データ
"neko"
"nyao"
"myao"
"syao"
"cyao"
をメモリに格納してみると
#include <stdio.h>
int main(void) {
char hairetu[]= "neko";
printf("%s\n", hairetu);
printf("%p\n", hairetu);
char hairetu[]= "nyao";
printf("%s\n", hairetu);
printf("%p\n", hairetu);
char hairetu[]= "myao";
printf("%s\n", hairetu);
printf("%p\n", hairetu);
char hairetu[]= "syao";
printf("%s\n", hairetu);
printf("%p\n", hairetu);
char hairetu[]="cyao";
printf("%s\n", hairetu);
printf("%p\n", hairetu);
return 0;
}
コンパイル結果
neko
0019FF53
nyao
0019FF4E
myao
0019FF49
syao
0019FF44
cyao
0019FF3F
アレサ「このようにコンパイル結果が表示されますが
このとき
文字列データ
"neko"
"nyao"
"myao"
"syao"
"cyao"
を格納しているメモリのアドレス
0019FF53
0019FF4E
0019FF49
0019FF44
0019FF3F
にご注目ください。
5ずつ
アドレス番号が小さくなりながらならんでいるのがわかります。
つまりポインタ変数を使って文字列データを格納するときと違い
文字列データ
"neko"
"nyao"
"myao"
"syao"
"cyao"
は
連続したメモリに格納されているのがわかりますの」
ソーラー「ここらあたりが
配列を使って文字列データを格納するとき
ポインタ変数を使って文字列データを格納するときの違いかな😊」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます