constを変数宣言の前に用いて変数宣言、初期化を行うと作製された変数に格納されているデータを変更することはできません  自作関数の引数となっている変数宣言にconstをつけてみる


ソーラー「だったら 


今度は自作関数の引数となっている変数宣言int xに


constをつけてみようじゃないか」


#include <stdio.h>


void function(const int x) {


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


return;


}


int main(void) {


function(1);


return 0;


}


アレサ「コンパイルできるのでしょうか?」


ソーラー「そうだね やってみよう


コンパっと」



(EAZY IDECの場合)

コンパイル結果

1


(Visual studioの場合)

ビルド実行結果

1



ソーラー「ちゃんとコンパイルできているね。」



アレサ「コマンドプロンプト画面に1が表示されているということは


変数宣言


const int xによって作成された変数xに


数値1が代入されているのはわかるのですの」


ソーラー「


constが自作関数の変数宣言int xについているということは


function(1);


が実行されて


int xに1が代入された場合


xに格納されている数値は1のまま変化しないということかな?」


アレサ「では 自作関数の定義に


x=2;


の命令文を追加して


xに格納されている値が1から2に変更されるかどうか


確かめてみましょう。


#include <stdio.h>


void function(const int x) {


x=2;


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


return;


}


int main(void) {


function(1);


return 0;


}


(EAZY IDECの場合)


コンパイル結果

2



(Visual studioの場合)

ビルド実行結果


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

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



ソーラー「なんと


これは予想外の展開になったね。


(EAZY IDECの場合)


コンパイル結果

2


となるように


const int xによって作製された変数xに


格納された数値が1から2に変更されている!」


アレサ「(Visual studioの場合)は


先程と同じように


xに格納されている値を変更しようとすると


プログラムが実行できないのです。」


ソーラー「


統合開発環境EAZY IDEC

統合開発環境Visual Studio


の差がこんなところにでてくるんだね。


コンパイラの仕様の違いってやつかな?」






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

作者を応援しよう!

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

応援したユーザー

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