[关闭]
@SuHongjun 2020-04-20T07:02:06.000000Z 字数 1507 阅读 307

C语言-Day 14:函数--2

C语言 2020春季学期


参数传递

值传递例子:

  1. #include "stdio.h"
  2. //用户自定义函数
  3. int add(int x, int y)
  4. {
  5. return x+y;
  6. }
  7. main()
  8. {
  9. int a;
  10. a = add(3,5); //值传递
  11. printf("%d\n",a);
  12. }

地址传递例子:

  1. #include "stdio.h"
  2. int add2(int *p1, int *p2) //指针
  3. {
  4. return *p1 + *p2;
  5. }
  6. main()
  7. {
  8. int a, x=3, y=5;
  9. a = add2(&x, &y); //注意这里的 & ,取地址
  10. printf("%d\n", a);
  11. }

局部变量 vs 全局变量

局部变量 与 全局变量的不同点:
- 定义变量的位置不同;
- 可见范围、作用域不同
局部变量的可见范围、作用域仅限于它所在的复合语句
全局变量的可见范围、作用域是它所在的 .c 文件,还可以通过变量声明、包含头文件的方式把作用域扩展到其它 .c文件

局部变量的例子1:

  1. #include "stdio.h"
  2. main()
  3. {
  4. int a=5; //a 是局部变量
  5. printf("%d\n", a);
  6. }

全局变量的例子1:

  1. #include "stdio.h"
  2. int a=5; //a 是全局变量
  3. main()
  4. {
  5. printf("%d\n", a);
  6. }

局部变量的例子2:

  1. #include "stdio.h"
  2. int f1(int x)
  3. {
  4. int n; //n是局部变量
  5. n = x * x;
  6. return n;
  7. }
  8. main()
  9. {
  10. int a, n=5; //a,n 都是局部变量
  11. printf("调用f1之前,n = %d\n", n);
  12. a = f1(3);
  13. printf("a = %d\n", a);
  14. printf("调用f1之后,n = %d\n", n);
  15. }

全局变量的例子2:

  1. #include "stdio.h"
  2. int n=5; //n是全局变量
  3. int f1(int x)
  4. {
  5. n = x * x; //n是全局变量
  6. return n;
  7. }
  8. main()
  9. {
  10. int a; //a是局部变量
  11. printf("调用f1之前,n = %d\n", n); //n是全局变量
  12. a = f1(3);
  13. printf("a = %d\n", a); //a是局部变量
  14. printf("调用f1之后,n = %d\n", n); //n是全局变量
  15. }

局部变量、全局变量的例子: --如果出现重名,以局部变量优先

  1. #include "stdio.h"
  2. int n=5;
  3. int f1(int x)
  4. {
  5. n = x * x; //n是全局变量
  6. return n;
  7. }
  8. main()
  9. {
  10. int a, n=5; //a, n 都是局部变量
  11. printf("调用f1之前,n = %d\n", n); //n是局部变量
  12. a = f1(3);
  13. printf("a = %d\n", a);
  14. printf("调用f1之后,n = %d\n", n);//n是局部变量
  15. a = f1(8);
  16. printf("再次调用f1之后,n = %d\n", n);//n是局部变量
  17. }

不同函数中,局部变量可以重名,不同函数中重名的局部变量互不相关:

  1. #include "stdio.h"
  2. int f1(int x)
  3. {
  4. int n=5; //n是局部变量
  5. n = x * x;
  6. return n;
  7. }
  8. main()
  9. {
  10. int a, n=5; //a, n 都是局部变量
  11. printf("调用f1之前,n = %d\n", n); //n是局部变量
  12. a = f1(3);
  13. printf("a = %d\n", a);
  14. printf("调用f1之后,n = %d\n", n);//n是局部变量
  15. a = f1(8);
  16. printf("再次调用f1之后,n = %d\n", n);//n是局部变量
  17. }

注意:不要滥用全局变量
滥用全局变量的弊端:
1. 难以把控变量值的变化;
2. 各模块之间的耦合变紧。

适当地使用全局变量可以简化编程

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注