一、函数的形式参数与实际参数:
1、形式参数:在定义函数时,函数名后面括号中的变量名称称为“形式参数”;
实际参数:在主调函数中调用一个函数时,函数名后面括号中的参数称为“实际参数”;
2、当没有出现函数调用时,形参并不占用内存中的存储单元;只有在发生函数调用时,被调用函数中的形参才被分配内存单元;
当函数调用结束后,形参所占的内存单元也被释放。
3、实参可以是常量、变量或表达式;
4、在被定义的函数中,必须指定实参的类型;
5、实参与形参的类型应相同或赋值兼容。若不同,则要先将实参转换成形参类型,再传递给形参;(字符型和整型可相互通用)
6、在C语言中,实参向形参的数据传递是“值传递”,单向传递,只能由实参传递给形参,而不能由形参传递给实参。
7、在内存中,实参单元和形参单元是不同的单元。在函数调用结束后,形参单元被释放,实参单元仍保留且维持原值。
因此在执行一个被调用函数时,形参的值如果反生改变,并不能改变主调函数中实参的值。
#include<stdio.h>
void main()
{
int max(int x, int y);
int a, b, c;
scanf("%d %d",&a,&b);
c = max(a, b);
printf("Max is %d\n", c);
printf("a= %d b= %d\n", a, b);
}
int max(int x, int y)
{
int z;
x = 10;
y = 22;
z = x > y ? x : y;
return z;
}
二、函数的返回值:通过函数调用使主调函数能得到一个确定的值;
1、(1)函数的返回值是通过函数中的return语句获得。return语句将被调用函数中的一个确定值带回主调函数中去;
(2)若要从被调函数中带回一个函数值供主调函数使用,被调函数中必须包含return语句;否则不需要;
(3)一个函数中可有一个以上的return语句,执行到哪个return语句,哪个语句起作用;
(4)return后面的括号可以省略,其后的值可以是一个表达式;
2、函数值的类型。凡是不加类型说明的函数,系统自动按整型处理;
例如:int max(float x, float y);函数值为整型
double min(int x, int y);函数值为双精度型
3、(1)当定义函数时指定的函数类型一般和return语句中的表达式类型一致;
(2)若函数值类型和return语句中的表达式的值不一致,则以函数类型为准。
(3)对数据类型,可以自动进行类型转换。函数类型决定返回值的类型;
4、对于不带回值的函数,应当用"void"定义函数为"无类型"(或空类型)。系统就保证不使函数带回任何值,
即禁止在调用函数中使用被调用函数的返回值。此时,在函数中不得出现return语句。
#include<stdio.h>
void main()
{
int max(float x, float y);
float a, b;
int c;
scanf("%f %f", &a, &b);
c = max(a, b);
printf("Max is %d\n", c);
printf("a= %f b= %f\n", a, b);
// return 0; //主函数为空类型,用return语句出现警告!
}
int max(float x, float y)
{
float z;
z = x > y ? x : y;
return z;
// return x > y ? x : y;
}
|
|