当前位置: 首页 > news >正文

C语言之可变参函数

1、什么是可变参函数

(1)在C语言里,可变参函数(variadic function)指的是可以接受个数不确定、类型也不完全固定的参数的函数。

(2)最典型的例子就是标准库里的printf / scanf家族。

2、头文件与 4 个必备的宏

#include <stdarg.h>

stdarg.h 里提供了 4 个宏:

(1)va_list ap; 

  • 声明一个“参数指针”变量。

(2)va_start(ap, last);

  • 把 ap 指向第一个可变参数
  • last 必须是函数形参中最后一个“固定参数”。

(3)va_arg(ap, type); 

  • 取出一个 type 类型的值,同时 ap 自动后移。

(4)va_end(ap); 

  • 清理,必须与 va_start 成对出现

(5)C99 又补充了 va_copy(va_list dst, va_list src);

  • 用于拷贝遍历状态。

3、示例代码

#include <stdio.h>
#include <stdarg.h>int Sum(int count, int data, ...)
{int sum = data;          /* 第一个数已拿到 */va_list ap;va_start(ap, data);      /* 从第二个数开始遍历 */for (int i = 1; i < count; ++i){sum += va_arg(ap, int);}va_end(ap);return sum;
}int main(void)
{printf("Sum = %d\n", Sum(5, 10, 20, 30, 40, 50)); /* 5 个数:10+20+30+40+50 */return 0;
}

4、原理

(1)如下函数:参数a、b、c在内存中的地址是递增的。如果数据类型相同,当我们知道了a的地址,也就可以知道b和c了,也就可以访问b和c了。

int add(int a, int b, int c);

(2)如下函数:如果知道了起始参数a的地址,和后续参数的类型,就可以得到后续参数的内存地址,便可以访问了。

  • 参数传入char类型,会被提升为int类型;
  • 所以说可变参数函数中至少需要一个确定的参数。
int add(int a, ...);

http://www.dtcms.com/a/495013.html

相关文章:

  • Centos 7 环境下mysql的安装及配置
  • CentOS修改MySQL数据目录后重启失败的问题及解决方案
  • 南宁市优化网站宜昌网站建设
  • 医药网站 备案做哪个网站的直播好
  • 永磁同步电机电流环低“采样与基频比率”(S2F)性能影响与改进
  • Vue3 - defineExpose的使用
  • Go Web 编程快速入门 01 - 环境准备与第一个 Web 应用
  • 图像处理之腐蚀算法-收缩去噪
  • 基于单片机的智能鱼塘饵料投喂系统设计
  • 串扰16-保护地线
  • LED氛围灯方案开发MCU控制芯片
  • 博客网站素材做网络推广一个月多少钱
  • txt怎么做网站wordpress the7 theme
  • 国产OCR模型荣登HF榜首——PaddleOCR-VL技术详解与多场景实测
  • seo网站排名优化快速排ppt背景模板免费下载
  • 保山市住房和城乡建设厅网站长春火车站人工电话
  • 网站开发内容和方法无锡市建设培训中心网站
  • 【Win32 多线程程序设计基础第七章笔记】
  • 大模型在网络安全领域的应用与评测
  • JavaEE--SpringIoC
  • macOS版Sublime简记
  • 机器学习(1)- 机器学习简介
  • 系统架构设计师备考第44天——软件架构演化方式的分类和原则
  • 郑州网站建设公司排行超级工程网站建设上海中心大厦
  • 睢县做网站酒店怎样做网站好评
  • Azure OpenAI 压测和配额规划完整指南
  • Lua C API 中的 lua_rawseti 与 lua_rawgeti 介绍
  • 基于单片机的便携式温湿度检测烘干机设计
  • lua对象池管理工具剖析
  • 网站建设选择什么系统好福建省建设工程执业注册管理中心网站