関数の呼び出し


○関数の呼び出し

  関数名(実引数のリスト)

 ・関数名の後の ( ) は、実引数がなくても必ず必要である。
 ・「実引数のリスト」は、各々の実引数を , カンマ comma 
      で区切ったものである。
 ・個々の実引数は式である。

    例1  sin( theta ), atan2( y, x )

 ・値を返す関数は、式の要素の一部として使われることが多い

    例2  x = r*cos( theta ) ;

 ・値を返さない関数(他の言語のサブルーチンに当たる)は、
    単独で文として使われることが多い

    例3
    sayhello( ){
       printf("Hello\n");
    }
    main( ){
       sayhello( );
    }

 ・値を返す関数が単独で使われた場合、返してきた値は単に無視する。
     (当然他にも何らかの作用がある)

    例4
    printf("x=%f\n",x);
     /* 結果として出力した文字数を返すがほとんどの場合無視する。*/


○関数の呼び出しの仕組 1.実引数がある場合は、各実引数の型に合わせて臨時の記憶場所が 確保され、各々の値が計算されてその記憶場所に格納される。 2.はじめに、局所変数の場所が確保され、関数のブロックが実行される。 ・ブロックの中で、仮引数を扱う部分は、臨時記憶の中の対応箇所が 対象となる ・戻る方法1 return 式 ; が実行されると、式の値を関数値として、呼び出した部分に戻る。 ・戻る方法2 式のない return ; が実行されるた場合は、呼び出した部分に戻るが、値は「不定」である。 ・戻る方法3 return が実行されずにブロックの実行が終了した場合は、戻る方法2と同じ 3. 実引数のための、臨時の記憶場所が開放される。 このように、実引数は、臨時の記憶場所にコピーされて関数に渡されるので、 関数中で、変更しても、呼び出した方の実引数そのものの値は変化しない。