天国にいけるC言語入門 ヘキサ構造体 ver5.2130
ポインタ変数をつかえば ポインタ変数にアドレスを代入することにより そのアドレスの場所のメモリに格納されているをデータを変更することができます
👇のエピソードをみればおわかりになられますように ポインタ変数の特徴は指定したアドレスの場所に格納されている数値を変更できることにあります
ポインタ変数をつかえば ポインタ変数にアドレスを代入することにより そのアドレスの場所のメモリに格納されているをデータを変更することができます
アレサ
「ポインタ変数にアドレスを代入し
そのアドレスの場所のメモリに格納されているデータを
変更してみます」
ソーラー「これは・・つまり
アドレスさえわかれば
そのアドレスのメモリの中に
格納されているデータを自由に変更できるってこと??
ポインタ変数ってすごいじゃないか」
アレサ「すごいんですの
次のプログラムをご覧くださいね。」
#include <stdio.h>
int main (void){
int a=10;
int* pta;
pta=&a;
*pta=5;
printf("%d\n",a);
*pta=8;
printf("%d\n",a);
*pta=111;
printf("%d\n",a);
return 0;
}
コンパイル結果
5
8
111
アレサ「
このプログラムでは
pta=&a;
が実行されて
ポインタ変数ptaに変数aのアドレスが格納されています
このように
🍋🍋🍋🍋🍋🍋🍋🍋🍋🍋🍋🍋🍋🍋🍋🍋🍋🍋🍋🍋🍋🍋
ポインタ変数ptaに変数aのアドレスを代入したなら
*ptaは 変数aのアドレスの場所のメモリに格納されているデータ(このプログラムの場合、数値データ)をあらわします。
🍋🍋🍋🍋🍋🍋🍋🍋🍋🍋🍋🍋🍋🍋🍋🍋🍋🍋🍋🍋🍋🍋
ここがとっても重要なんですの。
まず最初におこなわなければいけないのは
ポインタ変数ptaに変数aのアドレスを代入するということですの。
ポインタ変数ptaに変数aのアドレスを代入(初期化)しなければ
*ptaは 変数aのアドレスに格納されている数値をあらわしません。
ポインタ変数ptaは初期化されていない状態では
あるアドレスデータが格納されており
*ptaはそのアドレスの場所のメモリに格納されている数値を表すことになります
それは次のプログラムでご確認ください
#include <stdio.h>
int main (void){
int a=10;
int* pta;
/*ここではポインタ変数ptaにアドレスを代入せず初期化しません*/
printf("%d\n",*pta);
return 0;
}
(EAZY IDECの場合)
コンパイル結果
1703828
(Visual Studioの場合)
エラー C4700 初期化されていないローカル変数 'pta' が使用されます
アレサ「Visual Studioでは
変数(ポインタ変数)が初期化されていないプログラムを実行することはできません
このプログラムでは
ポインタ変数ptaに変数aのアドレスを代入して初期化しなかったため
ポインタ変数ptaには元から格納されている
あるアドレスデータが格納されています
そのアドレスの場所のメモリに格納されている数値
を*ptaはあらわしており
printf("%d\n",*pta);を実行すると
1703828がprintf出力表示されます
*ptaは
ポインタ変数ptaに変数aのアドレスを
pta=&a;と
代入して、はじめて
*ptaは 変数aのアドレスの場所のメモリに格納されている数値を
表します
そしてここがおもしろいのですが
変数aのアドレスの場所に格納されている数値をあらわす
*ptaに
*pta=5;
と
*ptaに数値5を代入すれば
変数aのアドレスの場所のメモリに格納されている数値を5に変更することができるのです
変数aのアドレスの場所のメモリに格納されている数値が5に変更されれば
変数aの値は
a=5と変化します
その結果
printf("%d\n",a);
が実行されると
変数aに格納されている値5がprintf出力表示されます
*pta=8;と
*ptaに数値8を代入すれば
変数aのアドレスの場所のメモリに格納されている数値を8に変更することができます
変数aのアドレスの場所のメモリに格納されている数値が8に変更されれば
変数aの値は
a=8と変化します
その結果
printf("%d\n",a)」
が実行されると
変数aに格納されている値8がprintf出力表示されます」
では次のプログラムをご覧ください
#include <stdio.h>
int main (void){
int a=10;
int* pta;
/*ここではポインタ変数ptaにアドレスを代入せず初期化しません*/
printf("%d\n",*pta);
*pta=8;
printf("%d\n",a);
*pta=111;
printf("%d\n",a);
return 0;
}
(EAZY IDECの場合)
コンパイル結果
1703828
10
10
(Visual Studioの場合)
エラー C4700 初期化されていないローカル変数 'pta' が使用されます
アレサ「Visual Studioでは
変数(ポインタ変数)が初期化されていないプログラムを実行することはできません
ptaに変数aのアドレスを格納しなければ
*ptaは変数aのアドレスの場所のメモリに格納されている数値
(変数aに格納されている数値)
をあらわさないので
*ptaにいくら数値
8
111を代入しても
変数aのアドレスの場所のメモリに格納されている数値は
8や111には変更されません。
つまり
変数aに格納されている数値は
8や111には変更されません。
この場合
変数aに格納されている数値は
最初のaの変数宣言、初期化
int a=10;
により
a=10のままなので
printf("%d\n",a);
の実行結果は10となるわけです
このように
ポインタ変数ptaに変数aのアドレスを代入(初期化)しなければ
*ptaは 変数aのアドレスの場所のメモリに格納されている数値をあらわさないことが
わかりますね」
ソーラー
「となると
ポインタ変数ptaに変数aのアドレスを代入すると
いう命令文
pta=&a;
がでてきた時点で
変数aのアドレスの場所のメモリに格納されている数値に変更を加えようと
していることが
わかるってわけだね。」
アレサ「そう、そうです ソーラーさん 冴えてる~😊」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます