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

是的你是对的。函数内变量的本地名称可以是您想要的任何名称,相关的是

  • 调用函数时必须对应的参数类型
  • 位置(如果是第一个,第二个,无论如何)

实际上,一旦您的代码被编译,生成的二进制文件就根本没有您的参数的任何名称。这是合法的:

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);

当我想在函数中使用超过 1 个参数时发生了什么?

然后使用逗号分隔参数:

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;
}

在上面的代码中,在main函数中你只是传递了circleRadius[实际参数]的值,所以这个值将被复制到形式参数[theRadius],这里与参数名称无关,你可以取同名为形式论据。在多个参数中也与参数名称无关,仅它会采用参数值并计算并返回结果。但是在传递参数时您需要集中精力的是您应该将形式参数的“数据类型”声明为与实际参数相同。

于 2013-01-07T07:20:40.197 回答
0

函数prototype由函数名称和它的参数类型列表组成,而不是名称。即编译器不会“看到”参数名称。当编译器看到你的调用

circleSurfaceArea = circleArea(circleRadius)

它看到你调用函数circleArea(float),因为circleRadiusis float。这与您的定义相匹配,因此编译器将调用与定义绑定。参数的名称无关紧要。

这是为了您的舒适,因为它通常适合在函数体内以不同于函数调用的方式命名参数(这里的参数被命名为“参数”)。这是一些旧语言中不存在的封装形式,例如http://en.wikipedia.org/wiki/GOSUB

封装有助于分离函数使用和函数实现。

如果您想要超过 1 个参数,请声明并定义更多参数。同样,编译器不会看到名称,只会看到类型。

我的回答是关于Cobjective-C。可能这里是巧合。

于 2013-01-06T22:12:30.620 回答