const int *pta = &a;と記述されて*ptaに格納されている数値データが変更できない場合を考察してみます
つづきです💖
ソーラー「次は
int a = 3;
const int *pta = &a;
が実行されたとき
*pta に格納されている値が3から変更されない場合のプログラムだね。」
#include<stdio.h>
int main(void)
{
int a = 3;
const int *pta = &a;
printf("%p\n", pta);
printf("%d\n", *pta);
*pta = 5;
/*ポインタ変数ptaに格納されている数値を3から5に変更しようとしています*/
printf("%p\n", pta);
printf("%d\n", *pta);
return 0;
}
コンパイル結果
(EAZY IDECの場合)
ファイル「C:/Users/solarplexuss/AppData/Local/EasyIDEC/project/hhhhhhhh/main.c」の
「12行目」で記述エラーを発見しました。
警告
assignment of read-only location
(意味は
"読み取りのみできるメモリにデータを割り当てようとしています"
となっています
つまり
"constによってメモリに格納されている値が変更できないように
なっているメモリに別の値を格納しようとしている"
と
エラー文が表示されているわけです
solarplexussより)
ビルド実行結果
(Visual studioの場合)
エラー (アクティブ) E0137 式は変更可能な左辺値である必要があります
エラー C3892 'pta': const である変数へは割り当てることはできません
ソーラー「
int a = 3;
const int *pta = &a;
が実行されると
変数aのアドレス&aがポインタ変数ptaに代入されるため
*pta はアドレス&aのメモリにアクセスして
アドレス&aのメモリに格納されている数値データ3を
表すことになるんだね
つまり
*pta は
変数aという名前のついたメモリに格納されている数値データ3を
表すことになるんだね」
アレサ「前のエピソードでも見てきたように
int a = 3;
const int *pta = &a;
が実行されたとき
constは *pta に格納されている数値でなく
変数aに格納されている数値が変更されないように働きかけています。
*pta に別の変数bのアドレス&bが代入されて
*ptaが変数bという名前の付いたメモリに
格納されている数値を表すことになったとしても
constは
変数aという名前の付いたメモリに格納されている数値が変更されないように働きかけているので
*ptaにいろいろな値を代入して
変数bという名前の付いたメモリに格納されている数値を
変更することができます。
const int *pta = &a;
となっていても
*pta に格納されている数値を変更することができるというわけですの。
このプログラムの場合
int a = 3;
const int *pta = &a;
が実行されると
ポインタ変数ptaに変数aのアドレス&aが代入されているので
*ptaは変数aという名前の付いたメモリに格納されている数値を
表しており
*ptaに格納されている数値は
変数aという名前の付いたメモリに格納されている数値3
となっています。
次に
*pta =5;
が実行されると
この場合は
変数aという名前の付いたメモリに格納されている数値3
を5に変更するということになります。
constは
変数aという名前の付いたメモリに格納されている数値が3
から
変更されないようにはたらきかけているので
*pta =5;
が実行されようとすると
実行ができないよう
コンパイルエラーが出る仕組みとなっているのですの。」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます