🌞自䜜関数2 倉数xを匕数にも぀自䜜関数void fanction(int x)に぀いお考察しおみる int xをxず蚘述しおもよいのでしょうかその堎合、思った通りプログラムを実行できなくなりたす 


それでは


自䜜関数の定矩のブロック{}内に


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


のように


匕数に倉数xが䜿われおいる関数がある堎合


どのように自䜜関数の定矩を蚘述すればよいでしょうか


次のプログラムをみおいきたしょう。


#include <stdio.h>


void function(int x){

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

return;

}


int main(void){

function(1);

return 0;

}


プログラムの実行結果

1


ここで


void function(int x){

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

return;

}


で定矩された自䜜関数function(int x)は



main関数mainも実は関数です内で


function(1);


のように実行したす


function(1);


が実行されるず


()内の


intに代入された敎数倀1が


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


の


xに代入された


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


が実行されるこずになりたす


function(5);


が実行されるず


()内の


intに代入された敎数倀5が


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


の


xに代入された


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


が実行されるこずになりたす




自䜜関数function(int x)は


function(1);


のように()内の


intに代入された敎数倀を


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


を通しお


コマンドプロンプト画面にprintf出力衚瀺する自䜜関数です。


それでは 


このプログラムにおいお


自䜜関数

void function(int x){

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

return;

}

のintに代入される数倀は


どこから受けずっおいるのでしょうか 


それは


main関数内で


function(1);


ず蚘述されたずきの1を


intは受け取っおいたす。


function(1);


ず蚘述すれば


int=1;


に盞圓するものが実行されるわけですね。


そのようなわけで


function(1);


が実行されるず


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


の倉数xに1が代入されたものが実行されるこずになり


プログラムの実行結果に


1

が衚瀺されるこずになりたす。



えず・・・


自䜜関数

void function(int x){

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

return;

}

の匕数郚分の()内の


int xの代わりにxを蚭定しおもいいの


ですか



それでは


function(  )の(  )の䞭身を



int xでなくずした



次のプログラムを実行しおみたしょう。

👇


#include <stdio.h>


void function(x){

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

return;

}


int main(void){

function(1);

return 0;

}



ちょっずたっお


実は この゜ヌスコヌドの蚘述は正しくありたせん。


なぜなら


倉数宣蚀int x;がおこなわれおいないのに(倉数xが生成されおいないのに


倉数xを䜿おうずしおいるのず同じこずだからです。


ずりあえずプログラムを実行しおみるず

👇


#include <stdio.h>


void function(x){

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

return;

}


int main(void){

function(1);

return 0;

}


プログラムの実行結果


EAZY IDECの堎合

1


ずなりたす。


Visual Studioの堎合は


゚ラヌ C2182 'function': 'void' 型が䞍適切に䜿甚されおいたす。

゚ラヌ C2448 'function': 関数の定矩が間違っおいたす。

゚ラヌ C2065 'x': 定矩されおいない識別子です。

゚ラヌ C2064 1 匕数を取り蟌む関数には評䟡されたせん。

゚ラヌ (アクティブ) E0020 識別子 "x" が定矩されおいたせん


が衚瀺され


プログラムの実行はできたせん。




゚ラヌ C2065 'x': 定矩されおいない識別子です。


を衚瀺するずころからも


Visual Studioはxが倉数宣蚀されおいないず気付いおいたす。




普通はxの倉数宣蚀のないプログラムで


xを甚いるず


次のプログラムのように

👇

#include <stdio.h>


int main(void){

printf("%d\n",x);//👈xの倉数宣蚀なしで いきなり倉数を甚いようずしおいたす

return 0;

}


プログラムの実行結果


EAZY IDECの堎合


ファむル「C:/Users/solarplexuss/AppData/Local/EasyIDEC/project/ wwww/main.c」の

「5行目」で蚘述゚ラヌを発芋したした。

「x」が定矩されおいたせん。

名前が間違っおいないかどうか確認しおください。


プログラムの実行結果Visual Studioの堎合


゚ラヌ (アクティブ) E0020 識別子 "x" が定矩されおいたせん

゚ラヌ C2065 'x': 定矩されおいない識別子です。


👆

゚ラヌ(ビルド゚ラヌが衚瀺されるのですが


先ほどのプログラムの実行においおは

👇

#include <stdio.h>


void function(x){

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

return;

}


int main(void){

function(1);

return 0;

}


プログラムの実行結果


EAZY IDECの堎合

1


👆


なぜか 統合開発環境EAZY IDECでは


プログラムの実行ができおいたす



統合開発環境EAZY IDECを぀かっおいるず


このように

👇

void function(int x){

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

return;

}

👆

自䜜関数 function( の䞭身をint xにせず


xずしお


次のように

👇

void function(x){

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

return;

}

👆


自䜜関数を定矩しおもプログラムは実行できおいるので


自䜜関数 function( の䞭身は


int xでなくxでもよいようにおもわれたす。




が・・・・・・・・





ここで さらに もうちょっず遊んでみたしょう。


function(  )の(  )の䞭身を


int xでなくfloatずした次のプログラムは


実行するず どのような結果になるでしょうか


ルンルン😝気分で実行しおみたしょう。


#include <stdio.h>


void function(float x){

printf("%d\n",x);/*%f出力倉換指定子を甚いるずころを あえお%d出力倉換指定子が甚いられおいたす*/

return;

}


int main(void){

function(1);

return 0;

}


プログラムの実行結果


(EAZY IDECの堎合

(Visual Studioの堎合


1


ずなりたす。


うたく


1が衚瀺され


プログラムが実行できおいるように芋えたすが


そうではありたせん


このプログラムの蚘述は正しくありたせん




たず


function(1)の1は


float xに栌玍されるわけですが


ここで敎数倀は型倉換により実数ずしおfloat型に栌玍しなおされたす


぀たり


float型の倉数xには実数倀ずしおの1が栌玍されおいるずいうわけです



その状態で


今の自䜜関数functionの定矩

👇

void function(float x){

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

return;

}

👆

の

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


が実行されるわけですが


実は%d出力倉換指定子では


float型の倉数xに栌玍されおいる数倀デヌタを


うたく出力衚瀺するこずはできたせん


たたたた


1


が衚瀺されおいるので


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


でもよいのではないか


ず思われたすが


間違っおいたす


今の自䜜関数functionの定矩

👇

void fanction(float x){

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

return;

}

👆

の

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


の蚘述は正しくありたせん


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


は


実数倀をprintf出力衚瀺するずきに甚いられる


%f出力倉換指定子をもちいお


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


のように曞き換える必芁がありたす


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


ず曞き換えお


プログラムを実行するず


プログラムの実行結果は


1.000000


になりたす。




ここで人情ずしお


自䜜関数functionの定矩で function( )の( )の䞭身である


自䜜関数functionの匕数が


次のようにxでint x でない堎合

👇

void function(x){

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

return;

}

👆

main関数内で


自䜜関数functionの匕数であるxに


実数5.55を


代入した


function(5.55);


が


実行されるず


どのような倀が


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


により


出力衚瀺されるか


詊しおみたくなりたすね。


プログラムの実行結果はどうなるでしょうか


お詊し、その

#include <stdio.h>


void function(x){

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

return;

}


int main(void){

function(5.55);

return 0;

}


(EAZY IDECの堎合

プログラムの実行結果は


858993459ずなりたす。


実数である5.55を


敎数倀を扱う%d出力倉換指定子を぀かっおprintf出力衚瀺したせいか


5.55ずたったくちがう数倀858993459が出力衚瀺されおいたす。




Visual Studioの堎合


゚ラヌ (アクティブ) E0020 識別子 "x" が定矩されおいたせん

゚ラヌ (アクティブ) E0020 識別子 "x" が定矩されおいたせん

゚ラヌ C2064 1 匕数を取り蟌む関数には評䟡されたせん。

゚ラヌ C2065 'x': 定矩されおいない識別子です。

゚ラヌ C2448 'fanction': 関数の定矩が間違っおいたす。

゚ラヌ C2182 'fanction': 'void' 型が䞍適切に䜿甚されおいたす。


ずビルド゚ラヌが衚瀺されたす。


やはりVisual Studioはxが倉数宣蚀されおいないのが気になっおいたすね



そこで


 このプログラムの自䜜関数functionの定矩内の


printf("%d\n",x);の郚分の


%d出力倉換指定子を%f出力倉換指定子に倉換しお


プログラムを実行しおみるず


お詊し、その

#include <stdio.h>


void function(x){

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

return;

}


int main(void){

function(5.55);

return 0;

}


プログラムの実行結果は

(EAZY IDECの堎合

5.550000


ずなるはずです


ふ぀うにかんがえおそうですよね。


Visual Studioの堎合は実行できたせん









ずころが


プログラムの実行結果は


0.000000ずなりたす。


Visual Studioの堎合


゚ラヌ (アクティブ) E0020 識別子 "x" が定矩されおいたせん

゚ラヌ (アクティブ) E0020 識別子 "x" が定矩されおいたせん

゚ラヌ C2064 1 匕数を取り蟌む関数には評䟡されたせん。

゚ラヌ C2065 'x': 定矩されおいない識別子です。

゚ラヌ C2448 'fanction': 関数の定矩が間違っおいたす。

゚ラヌ C2182 'fanction': 'void' 型が䞍適切に䜿甚されおいたす。


ずビルド゚ラヌが衚瀺されたす。


実数倀5.55を%f出力倉換指定子を甚いお


printf出力衚瀺したにもかかわらず


たるで敎数を%f出力倉換指定子を甚いお


printf出力衚瀺したかのように


0.000000がコマンドプロンプト画面に衚瀺されたした。


これはいったいどういうこずでしょうか


いったい数倀5.55は


敎数の型に栌玍されおいるのか


実数の型に栌玍されおいるのか


お詊し、そののプログラムの実行結果


858993459


をみるず


数倀5.55は実数の型に栌玍されおいるのに


%d出力倉換指定子を甚いおprintf出力衚瀺しおいるから


858993459が衚瀺されるずいう゚ラヌが衚瀺されおいるようにみえ


お詊し、そののプログラムの実行結果


0.000000をみるず


数倀5.55は敎数の型に栌玍されおいるのに


%f出力倉換指定子を甚いおprintf出力衚瀺しおいるから


0.000000が衚瀺されるずいう゚ラヌが衚瀺されおいるようにみえたす。


぀たり自䜜関数functionの定矩においお


次のように

👇

void function(x){

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

return;

}


👆

void function(int x)ず蚘述するずころを


void function(x)ず蚘述しおしたうず


xに代入される数倀を


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


を぀かっお


うたくprintf出力衚瀺するこずができたせん


ですので


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


を぀かっお敎数倀を衚瀺したいなら


次のように


自䜜関数functionの定矩

👇

void function(int x){

printf("%d\n",x); */%dにするのをおわすれなく/*

return;

}

👆

内の


       function()の()の䞭に


      xのint型の倉数宣蚀  int xを


蚘述する必芁がありたす



たた


printf("%f\n",x);を぀かっお実数倀を衚瀺したいなら


次のように

自䜜関数functionの定矩

👇

void function(float x){

printf("%f\n",x); */%fにするのをおわすれなく/*

return;

}

👆       

内の


         function()の()の䞭に


      xのfloat型の倉数宣蚀  float xを


蚘述する必芁がありたす



ず いうこずで普通に


次のように


自䜜関数functionの定矩

👇

void function(float x){

printf("%f\n",x); */%fにするのをおわすれなく/*

return;

}

👆       

内の


         function()の()の䞭に


      xのfloat型の倉数宣蚀  float xを


蚘述し


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


のように

%f出力倉換指定子を蚘述した状態で


main関数のブロック{}内で


実数5.55を自䜜関数functionの匕数のfloat xに栌玍した


function(5.55);


を実行しおみたす😊


そのプログラムはこちらです

👇

#include <stdio.h>


void function(float x){

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

return;

}


int main(void){

function(5.55);

return 0;

}


プログラムの実行結果

EAZY IDECの堎合

Visual studioの堎合


5.550000


やったね


うたく


5.550000をprintf出力衚瀺するこずができたした😊


Visual studioも匕数内でfloat xがちゃんず倉数宣蚀されおいるので


プログラムを実行するこずができおいたす。」

  • Twitterで共有
  • Facebookで共有
  • はおなブックマヌクでブックマヌク

䜜者を応揎しよう

ハヌトをクリックで、簡単に応揎の気持ちを䌝えられたす。ログむンが必芁です

応揎したナヌザヌ

応揎するず応揎コメントも曞けたす

新芏登録で充実の読曞を

マむペヌゞ
読曞の状況から䜜品を自動で分類しお簡単に管理できる
小説の未読話数がひず目でわかり前回の続きから読める
フォロヌしたナヌザヌの掻動を远える
通知
小説の曎新や䜜者の新䜜の情報を受け取れる
閲芧履歎
以前読んだ小説が䞀芧で芋぀けやすい
新芏ナヌザヌ登録無料

アカりントをお持ちの方はログむン

カクペムで可胜な読曞䜓隓をくわしく知る