constを自作関数の引数に設定すると自作関数内で引数に格納されている数値を変更することはできなくなります



ソーラー「ここでconstを自作関数の引数に設定した場合の


おさらいをもう1回してみようよ アレサ」


アレサ「はい😊ソーラーさん」



#include <stdio.h>


void function(int b) {


b = 2;


printf("%d\n", b);


return;


}


int main(void) {


int a = 1;


function(a);


return 0;


}

ビルド実行結果

2



ソーラー「このプログラムでは


int a = 1;


function(a);


により


変数aに格納されている数値1



自作関数functionの引数部分のint bに


値渡しされています。


さらに


自作関数functionの定義

👇

void function(int b) {


b = 2;


printf("%d\n", b);


return;


}


内で


b = 2;


により

変数bに格納されている値は


1から2に変化しています。


printf("%d\n", b);


の実行結果が


2


になっていることからもそのことがわかります。


次は


今のプログラムの


自作関数functionの定義を


void function(int b) {


b = 2;


printf("%d\n", b);


return;


}


から


 int b


にconstを設定して


void function(const int b) {


b = 2;


printf("%d\n", b);


return;


}


に書き換えて


プログラムを実行してみます。




#include <stdio.h>


void function(const int b) {


b = 2;


printf("%d\n", b);


return;


}


int main(void) {


int a = 1;


function(a);


return 0;


}


ビルド実行結果


エラー (アクティブ) E0137 式は変更可能な左辺値である必要があります

エラー C3892 'b': const である変数へは割り当てることはできません


ソーラー「このように


int bにconstが設定されているとビルドエラーが生じることになるんだよ」」


アレサ「なぜなのでしょうか? ソーラーさん」


ソーラー「


int a = 1;


function(a);


により


自作関数functionの引数部分のint bに


変数aに代入されている数値1が値渡しされると


変数bに格納されている数値は1になりますが


int bにconstが設定されているので


変数bに格納されている数値は

1

の状態から

もう変更することはできなくなります。


ですので


自作関数の定義内の命令文


b = 2;


printf("%d\n", b);


が実行される段階にうつると


b = 2;



変数bに2が代入されることになりますが


int bにconstが設定されているので


変数bに格納されている数値は

1

から変更することはできなくなっているので


ビルドエラーが表示されることになるんだね。


そのことが


エラー C3892 'b': const である変数へは割り当てることはできません

のビルド実行結果をみてもわかるってわけだね」


アレサ「そういうことだったのですか」


ソーラー「そうなんだ~」


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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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