1

以下の関数では、引数を使用したいことをmain呼び出して伝えています。circleArea()circleRadius

その後、circleArea()関数宣言で、引数の名前を に変更していますtheRadius

私が理解していることから、関数を呼び出すときに引数を宣言したので、関数を宣言すると、関数で使用する値がわかり、別の名前を付けることができます。本当?

その場合、関数で複数の引数を使用したい場合はどうなりますか?

int main()
{    
    float pictureWidth, pictureHeight, pictureSurfaceArea,
    circleRadius, circleSurfaceArea; // [4.4]
    pictureWidth = 8.0;
    pictureHeight = 4.5;
    circleRadius = 5.0; // [4.7]

    pictureSurfaceArea = pictureWidth * pictureHeight;

    // Here we call our function
    circleSurfaceArea = circleArea(circleRadius); 
}

float circleArea(float theRadius) // [5.1]
{
    float theArea;
    theArea = 3.1416 * theRadius * theRadius; // pi times r square [5.4]
    return theArea;
}
4

4 に答える 4

3

はい、あなたは正しいです。関数内の変数のローカル名は、任意の名前にすることができます。関連するものは

  • 関数を呼び出すときに対応しなければならないパラメータの型
  • 位置 (1 番目、2 番目などの場合)

実際、コードがコンパイルされると、結果のバイナリにはパラメータの名前がまったくありません。これは合法です:

void method(int a, int b);

int main()
{
  int z,x,y;

  method(x,y);
  method(z,y);
}

void method(int a, int b) {
  //
}

パラメーターのスコープは、関数のすべてのローカル変数と同じであり、その関数内でのみ有効です。

于 2013-01-06T21:55:59.467 に答える
2

関数宣言では、circleArea()関数を呼び出したときに引数を宣言したため、引数の名前をtheRadius [...]に変更しています。したがって、関数を宣言すると、関数で使用する値がわかります。別の名前を付けることができます。

それが何を意味するのかわかりません...引数の名前は、関数の実装(または「本体」)内でのみ重要です。関数本体は、引数の名前を使用してその引数を参照します。関数を(定義するのではなく)呼び出すときに渡す変数の名前は関係ありません。任意の式を渡すことができるため、名前さえない場合もあります。この場合、引数には「名前がありません」(正しい用語を使用して説明するのは難しい)もありません。circleSurfaceArea = circleArea(1.0);

関数で複数の引数を使用したい場合はどうなりますか?

次に、コンマを使用して引数を区切ります。

float rectangleArea(float a, float b);
于 2013-01-06T21:57:48.003 に答える
2
int main()
{    
   float pictureWidth, pictureHeight, pictureSurfaceArea,
   circleRadius, circleSurfaceArea; // [4.4]
   pictureWidth = 8.0;
   pictureHeight = 4.5;
   circleRadius = 5.0; // [4.7]

   pictureSurfaceArea = pictureWidth * pictureHeight;

   // Here we call our function
  circleSurfaceArea = circleArea(circleRadius); 
}

float circleArea(float theRadius) // [5.1]
{
   float theArea;
   theArea = 3.1416 * theRadius * theRadius; // pi times r square [5.4]
   return theArea;
}

上記のコードでは、メイン関数で circleRadius[実際の引数] の値を渡すだけなので、この値は仮引数 [theRadius] にコピーされます。ここでは引数の名前とは関係ありません。同じ名前を使用できます。仮引数の場合。複数の引数でも、引数名とは関係ありません。引数の値を取り、計算して結果を返します。ただし、引数を渡すときに集中する必要があるのは、仮引数の「データ型」を実引数と同じように宣言する必要があることです。

于 2013-01-07T07:20:40.197 に答える
0

関数prototypeは、名前ではなく、関数名とそのパラメーターの型のリストで構成されます。つまり、コンパイラはパラメータ名を「認識」しません。コンパイラがあなたの呼び出しを見たとき

circleSurfaceArea = circleArea(circleRadius)

is であるcircleArea(float)ため、function を呼び出していることがわかります。これは定義と一致するため、コンパイラは呼び出しを定義にバインドします。パラメータの名前は重要ではありません。circleRadiusfloat

これは、関数本体内のパラメーターに関数呼び出しとは異なる名前を付けるのに適していることが多いため、快適にするために作成されています (ここでは、パラメーターは「引数」と名付けられています)。これは、http://en.wikipedia.org/wiki/GOSUBのような一部の古い言語には存在しなかったカプセル化の形式です。

カプセル化は、関数の使用と関数の実装を分離するのに役立ちます。

複数のパラメーターが必要な場合は、それらをさらに宣言して定義します。ここでも、コンパイラは名前を認識せず、型のみを認識します。

私の答えはありCませんobjective-C。ここはたまたまだったのかもしれません。

于 2013-01-06T22:12:30.620 に答える