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 ); //声明的变量名可以省略,要加分号,声明要与定义匹配
标签:
[精益求精]C/C++实践笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人