C/C++实践笔记 014自己实现可变参数的函数
一、什么是函数?—根据输入进行处理返回输出
(void) 参数为空
函数的默认类型是int,可以省略
函数的副本机制
参数传递是单向值传递
C语言参数过多会警告,多的会忽略,结果不保证正确
C语言尽量类型一致,个数一致
return也会完成类型转换
C语言函数不返回可以编译,但是结果自负
副本机制通过赋值,赋值会自动类型转换
函数除了数组外,都是副本
函数执行过程
C语言函数一定要加声明,加了声明一定不会出错,不加声明有可能出错
函数的执行顺序:从下往上进栈,从上往下执行。
函数参数运算顺序:从右面的参数开始算 (int a,int b) 先计算b的值,再计算a的值,从右往左
show(a,a++); //执行结果6,5
二、函数可变参数的实现
1.int可变参数:
#include<stdarg.h> // 标准参数 int add(int num,...) //...代表可变参数 { int res=0; //结果 va_list argp; //存储参数开始的地址 va_start(argp,num); // 从首地址开始,读取num后面的数据 for(int i=0;i<num;i++) { res+=va_arg(argp,int); //读取一个数据按照int类型解析 } va_end(argp); //结束读取 return res; }
2.字符串可变参数:
void go(int num,...) { va_list argp; //存储参数开始的地址 va_start(argp,num); // 从首地址开始,读取num后面的数据 for(int i=0;i<num;i++) { char str[50]; sprintf(str,"%s",va_arg(argp,char *)); system(str); //读取一个数据按照char *解析 } va_end(argp); //结束读取 }
如果个数也不知道:
void showint(int start,...) { va_list argp; //存储参数开始的地址 va_start(argp,start); // 从首地址开始,读取num后面的数据 int argvalue=start; //第一步初始化 do { printf("\n%d",argvalue); argvalue=va_arg(argp,int); //不断读取 }while(argvalue!=-1); va_end(argp); //结束读取 }
三、C函数声明
声明可以有多个,定义只能有一个
理论上一定要加声明
int a; //全局变量声明,没有初始化默认为0,有的话就是默认的值
int a=9; //全局变量定义,只能有一个
全局变量,跨文件都可以调用
如果重名,局部变量会屏蔽全局变量,内部块语句变量会屏蔽外部变量
全局变量,很容易被覆盖,很容易被读写
局部变量没有声明与定义的区别
int add(int ,int ); //声明的变量名可以省略,要加分号,声明要与定义匹配

浙公网安备 33010602011771号