Kotori 发表于 2017-8-11 13:39:28

S1E29参数和指针笔记

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

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

int max(int a, int b);
int max(int a, int b)   //a,b为形参
{
        if (a > b)
        {
                return a;
        }
        else
        {
                return b;
        }
}

int main()
{
        int i=1, j=2;
        int k;
        k = max(i, j);        //i,j为实参
        printf("%d" ,k);
        return 0;
}
3>传值和传址
      传值和传址是向函数传递参数的两种方式。传值不改变变量在当前作用域的值,相当于在函数中复制了这个值。而传址则是传入一个参数的实际地址,因此对它的修改是全局的。当传的参数体积较大时,传址更灵活,更节省空间。如果不想这个传址的数据被修改,可用const修饰。
4>传数组
      C语言中没有直接传递整个数组作为参数的方法,实际上传入的是数组的地址。因此,下面两种方法并没有区别:
int max(int a);
int max(int a[]);
5>可变参数
      C语言中实现可变参数需引入头文件<stdarg.h>,其内部通过指针对参数进行依次获取,参数不能重复获取。下面是以printf为原型模板。
#include <stdarg.h>

        ......

int myprintf(char *str,...)        //...作为占位符,表示参数个数未知,第一个参数不可省
        {
        ......
        va_list vap;        //定义参数列表,vap为参数列表名
        va_start(vap, str);        //初始化参数列表,第一个为参数列表名,第二个参数为定义函数的第一个参数
        ......
        <变量名> =va_arg(vap, <变量类型>);        //从参数列表中依次获取参数,注意获取单个字符时,变量类型为int;
        ......
        va_end(vap);
        }
页: [1]
查看完整版本: S1E29参数和指针笔记