在下面的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;
}
答案 0 :(得分: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) {
//
}
参数的范围与函数的每个局部变量相同,并且在该函数内部有效。
答案 1 :(得分:2)
在
circleArea()
函数声明中我们正在将参数的名称更改为theRadius [...],因为我们在调用函数时声明了一个参数,所以当我们声明函数时它知道我们想要哪个值在函数中使用,我们可以给它一个不同的名称。
我不确定你的意思...... 参数的名称仅在函数的实现(或“body”)内部才有意义。函数体使用参数的名称引用其参数。当你调用(而不是定义)函数时,你传递的变量的名称并不重要。它甚至可能没有名称,因为你可以传递任何表达式,circleSurfaceArea = circleArea(1.0);
也可以,在这种情况下,参数甚至没有“有名字”(嗯,很难用正确的术语来解释)
当我想在函数中使用多个参数时发生了什么?
然后用逗号分隔参数:
float rectangleArea(float a, float b);
答案 2 :(得分:0)
函数prototype
由函数名及其参数类型列表组成,而不是名称。即编译器不“看到”参数名称。当编译器看到你的电话时
circleSurfaceArea = circleArea(circleRadius)
它看到您调用函数circleArea(float)
,因为circleRadius
是float
。这与您的定义匹配,因此编译器将调用与定义绑定。参数名称无关紧要。
这是为了您的舒适,因为它通常适用于在函数体内命名参数而不是函数调用(此处参数名为“arguments”)。这是封装的形式,这在某些旧语言中不存在,例如http://en.wikipedia.org/wiki/GOSUB
封装有助于分离功能使用和功能实现。
如果您需要多个参数,请声明并定义更多参数。再次编译器不会看到名称,只有类型。
我的回答是关于C
而不是objective-C
。这可能是巧合。