鱼C论坛

 找回密码
 立即注册
查看: 1942|回复: 0

[技术交流] S1E29参数和指针笔记

[复制链接]
发表于 2017-8-11 13:39:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

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

x
本帖最后由 Kotori 于 2017-8-11 13:39 编辑

参数和指针
  1>参数和返回值
        设计函数应该遵循“一个函数实现一个功能”的原则;
        函数一般有返回值,也有函数没有返回值,这时会有“通过返回值告诉用户函数是否调用成功”的做法。
  2>形参与实参
        形参指定义函数时的参数,主要的实现空间分配,了解函数需要传入的参数,以及在函数中使用传入参数。
        实参指在调用函数时给函数传入的参数。
  1. #include <stdio.h>

  2. int max(int a, int b);
  3. int max(int a, int b)     //a,b为形参
  4. {
  5.         if (a > b)
  6.         {
  7.                 return a;
  8.         }
  9.         else
  10.         {
  11.                 return b;
  12.         }
  13. }

  14. int main()
  15. {
  16.         int i=1, j=2;
  17.         int k;
  18.         k = max(i, j);        //i,j为实参
  19.         printf("%d" ,k);
  20.         return 0;
  21. }
复制代码

  3>传值和传址
        传值和传址是向函数传递参数的两种方式。传值不改变变量在当前作用域的值,相当于在函数中复制了这个值。而传址则是传入一个参数的实际地址,因此对它的修改是全局的。当传的参数体积较大时,传址更灵活,更节省空间。如果不想这个传址的数据被修改,可用const修饰。
  4>传数组
        C语言中没有直接传递整个数组作为参数的方法,实际上传入的是数组的地址。因此,下面两种方法并没有区别:
  1. int max(int a[5]);
  2. int max(int a[]);
复制代码

  5>可变参数
        C语言中实现可变参数需引入头文件<stdarg.h>,其内部通过指针对参数进行依次获取,参数不能重复获取。下面是以printf为原型模板。
  1. #include <stdarg.h>

  2.         ......

  3. int myprintf(char *str,...)        //...作为占位符,表示参数个数未知,第一个参数不可省
  4.         {
  5.         ......
  6.         va_list vap;        //定义参数列表,vap为参数列表名
  7.         va_start(vap, str);        //初始化参数列表,第一个为参数列表名,第二个参数为定义函数的第一个参数
  8.         ......
  9.         <变量名> =va_arg(vap, <变量类型>);        //从参数列表中依次获取参数,注意获取单个字符时,变量类型为int;
  10.         ......
  11.         va_end(vap);
  12.         }
复制代码

评分

参与人数 1鱼币 +4 收起 理由
小甲鱼 + 4

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 18:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表