《C语言教程》16章 函数和参数的关系

[复制链接]
1072|5
 楼主| niuyaliang 发表于 2015-3-17 20:30 | 显示全部楼层 |阅读模式
函数里面的数据要和函数外面的数据相互传递,用什么方法呢?有人马上想到全局变量。这的确可以,但不是好方法,因为数据随时有可能被其它函数修改。也有人想到静态变量,说明这人还没明白静态变量的要领,请翻到前一章阅读。函数内部与外部数据交换,正确的方法是使用参数和返回值。
 楼主| niuyaliang 发表于 2015-3-17 20:30 | 显示全部楼层
一、参数与返回值的关系
对于函数来说,外部数据要传到内部时,称之为“输入”,函数内部数据传到外部,称之为“输出”。返回值只能输出而不能输入。当需要多个输入数据,而只需要一个输出数据时,一般用参数来输入,而用返回值作输出。
 楼主| niuyaliang 发表于 2015-3-17 20:31 | 显示全部楼层

  1. #include <stdio.h>

  2. int sum(int, int);    //申明时参数可以只写类型

  3. int main(void)
  4. {
  5.     int x, y, z;

  6.     printf("请输入x和y的值:");
  7.     scanf("%d %d", &x, &y);

  8.     z = sum(x, y);    //调用函数求和
  9.     printf("%d + %d = %d \n", x, y, z);

  10.     return 0;
  11. }

  12. int sum(int num1, int num2)
  13. {
  14.     return num1 + num2 ;
  15. }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| niuyaliang 发表于 2015-3-17 20:31 | 显示全部楼层
二、基本类型作参数
当需要多个输入和输出时,就可以考虑使用参数。参数既能输入又能输出,但基本类型作参数时,只能输入,不能输出。下面的例子不能得到满意的结果,就是因为基本类型的变量作参数。

  1. #include <stdio.h>

  2. void change(int, int);

  3. int main(void)
  4. {
  5.     int x, y ;

  6.     printf("请输入x和y的值:");
  7.     scanf("%d %d", &x, &y);

  8.     printf("\n交换前: x = %d,  y = %d \n", x, y);
  9.     change(x, y);    //调用函数交换数据
  10.     printf("\n交换后: x = %d,  y = %d \n", x, y);

  11.     return 0;
  12. }

  13. void change(int num1, int num2)
  14. {
  15.     int temp;

  16.     printf("\n交换前: num1 = %d,  num2 = %d \n", num1, num2);
  17.     temp = num1 ;
  18.     num1 = num2 ;
  19.     num2 = temp ;
  20.     printf("交换后: num1 = %d,  num2 = %d \n", num1, num2);

  21.     return ;
  22. }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| niuyaliang 发表于 2015-3-17 20:32 | 显示全部楼层
三、指针变量作参数
基本类型作参数时,C语言使用“值传送”的方法,非基本类型则采用的是“地址传送”的方法。因此,上面的问题可以改成指针作参数,问题便迎刃而解。由此可知,前面章节讲到scanf()函数时,当输入int类型数据时,为什么要用&加在变量前。

  1. #include <stdio.h>

  2. void change(int *, int *);

  3. int main(void)
  4. {
  5.     int x, y ;

  6.     printf("请输入x和y的值:");
  7.     scanf("%d %d", &x, &y);

  8.     printf("\n前:x=%d, y=%d\n", x, y);
  9.     change(&x, &y);    //调用函数交换数据
  10.     printf("\n后:x=%d, y=%d\n", x, y);

  11.     return 0;
  12. }

  13. void change(int *num1, int *num2)
  14. {
  15.     int temp;

  16.     printf("\n前:*num1=%d, *num2=%d\n", *num1, *num2);
  17.     temp = *num1 ;
  18.     *num1 = *num2 ;
  19.     *num2 = temp ;
  20.     printf("后:*num1=%d, *num2=%d \n", *num1, *num2);

  21.     return ;
  22. }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| niuyaliang 发表于 2015-3-17 20:33 | 显示全部楼层
四、const可防止参数被修改
基本类型作参数时,在函数中即使被修改也不能传回去,但如果是指针,修改之后就一定会改变调用处变量的值。C语言中,在参数前加上const便可阻止被修改的现象。

  1. #include <stdio.h>

  2. void print(char *, const char *);

  3. int main(void)
  4. {
  5.     char x[] = "quanxue";
  6.     char y[] = "C Language" ;

  7.     print(x, y);

  8.     return 0;
  9. }

  10. void print(int *s1, const int *s2)
  11. {
  12.     s1[0] = 'Q', s1[4] = 'X';    //将q→Q,x→X
  13. //  s2[0] = 'c', s2[2] = 'L';    //这句编译错误

  14.     printf("%s\n%s\n", s1, s2);

  15.     return ;
  16. }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

212

主题

2427

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部