您的位置:首页 > 其它

基础知识—函数-函数参数及返回值

2017-04-21 00:47 204 查看
函数的返回值是指函数在调用后,执行函数体中的程序段所取得并返回给主函数的值,函数的返回值通过return语句返回给主函数

return (表达式);

关于返回值1.函数的返回值类型和函数定义中的函数类型标识符应该保持一致,若不一致则以函数类型为准,自行进行类型转换。

2.在函数中可以存在多个return语句,但是只会有一个return语句被执行,因此只能返回一个返回值。

3.return ;可以理解为结束,退出函数。

4.void类型的函数不能进行赋值运算及值传递。

例如i=Showindex();

Set(Showindex);

关于形参和实参

函数定义时,如果参数表为空,则认为函数是无参数的。

而又参数的函数,在函数声明和定义时,参数被称为形式参数,而函数在调用时,参数被称为实参。

实参和形参应该是个数相等,类型一致,一一对应的。

实参和形参会按照顺序对应一一传递数据。

区别

1)在定义函数中指定的参数,在未出现函数调用时,它们并不占存储空间,只有发生在函数调用时,形参才会被赋予内存单元,在调用结束后,形参所占的内存单元也被释放。

2)实参是确定的值,在调用时,把实参的值传递给形参。

3)实参和形参的类型应该相同

4)实参和形参是单向传递,只能由实参传递给形参,而不能反向,即对形参的操作不能反馈到实参上。

注意

区别值传递,地址传递,和引用传递。

值传递,传递后,形参获得实参的一个副本,即做了形参=实参这个操作,此后,无论函数体内对形参进行了如何的操作,都不会影响实参。

地址传递

int a = 4;

int b = 6;

函数/*void Exchg(int *px, int *py)

{

int tmp = *px;

*px = *py;

*py = tmp;

printf(“*px = %d, *py = %d.\n”, *px, *py);

}*/

Exchg(&a, &b);

printf(“a = %d, b = %d.\n”, a, b);

结果会是

*px = 6, *py = 4.

a = 6, b = 4.

即在函数内的操作影响到了实参,因为实参的地址传递给函数,函数直接对实参进行了运算。

按引用传递

void Exchg3(int &x, int &y) /* 注意定义处的形式参数的格式与值传递不同 */

{

int tmp = x;x = y;

y = tmp;

printf(“x = %d, y = %d.\n”, x, y);

}

main()

{

int a = 4;

int b = 6;

Exchg3(a, b); /注意:这里调用方式与值传递一样/

printf(“a = %d, b = %d.\n”, a, b);

}

输出结果:

x = 6, y = 4.

a = 6, b = 4. /这个输出结果与值传递不同。/

看到没有,与值传递相比,代码格式上只有一处是不同的,即在定义处:

Exchg3(int &x, int &y)

但是我们发现a与b的值发生了对调。这说明了Exchg3(a, b)里头修改的是a、b变量,而不只是修改x、y了。

我们先看Exchg3函数的定义处Exchg3(int &x, i
4000
nt &y)。参数x、y是int的变量,调用时我们可以像值传递(如: Exchg1(a, b); )一样调用函数(如: Exchg3(a, b);)。但是x、y前都有一个取地址符号“&”。有了这个,调用Exchg3时函数会将a、b 分别代替了x、y了,我们称:x、y分别引用了a、b变量。这样函数里头操作的其实就是实参a、b本身了,也就是说函数里是可以直接修改到a、b的值了。

最后对值传递与引用传递作一个比较:

1)在函数定义格式上有不同:

值传递在定义处是:Exchg1(int x, int y);

引用传递在这义处是:Exchg3(int &x, int &y);

2)调用时有相同的格式:

值传递:Exchg1(a, b);

引用传递:Exchg3(a, b);

3)功能上是不同的:

值传递的函数里操作的不是a、b变量本身,只是将a、b值赋给了x、y。函数里操作的只是x、y变量而不是a、b,显示a、b的值不会被Exchg1函数所修改。

引用传递Exchg3(a, b)函数里是用a、b分别代替了x、y。函数里操作的就是a、b变量的本身,因此a、b的值可在函数里被修改的。

默认参数 C中似乎没有默认参数 但可以用宏实现

在调用有参函数时,如果经常需要传递同一个值到调用函数,在定义函数时,可以为参数设置一个默认值,这样在调用函数时可以省略一些参数,此时程序将采取默认值作为函数的实际参数。



int GetMax(int x,int y,int z=10)

{

语句

}

如果只传递两个实际参数,不会报错。

include

include

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐