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 ); //声明的变量名可以省略,要加分号,声明要与定义匹配

posted @   千年风雅丶  阅读(214)  评论(0编辑  收藏  举报
编辑推荐:
· 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训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示