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

C语言关于指针函数可变参数的使用方法和打印相应数据

 通过使用四个函数来实现 指针函数的可变参数操作;

四个函数分别为:

#include <stdarg.h>va_list ap;          //初始化 参数列表指针
va_start(ap, count); //将ap指针指向第一个参数COUNT 这个是必须存在的 否则无法定位到后面的参数
va_arg(ap, int);     //这个是按顺序读取写入的参数 每运行一次只能读取一个 不用的数据,需要用不同的 //类型去接受  我试验过的有 char* int double 这些都可以读取出来  
va_end(ap);          //释放ap指针的内容 防止函数运行结束后内存泄漏;                    

 下面是我的测试程序:

#include <stdarg.h>
#include <stdio.h>void my_sum(int count, ...);void (*funtion)(int count, ...);void  add(int count, ...) {va_list ap;int a;int b;int sum = 0;int i = 0;//sum += va_arg(ap, int);va_start(ap, count);//用于标记这个COUNT的地址 为寻找后面的参数提供解决办法printf("%d \n", va_arg(ap, int));printf("%d \n", va_arg(ap, int));printf("%f \n", va_arg(ap, double)); // float 不可行   原因 : 未知printf("%s \n", va_arg(ap, char *));printf("%c \n", (char)va_arg(ap, int));// 这个 我也有一点不理解 为什么va_arg(ap, char)  不能够输出// 我的理解是 va_arg(ap, int) 是一个整型 然后将其变为Char型就可以输出一个R// 我计划尝试一下floatprintf("%f \n", (float)va_arg(ap, double)); //这个可以正常输出 但是我还是不清楚为什么 只能是 DOUBLE   !-0-!va_end(ap);}int main() {funtion = add;(*funtion)(3, 15, 15, 2.555555, "asdfghjkl", 'R', 2.5);return 0;
}void my_sum(int count, ...) {//将要用来存放需要的某个可变参数的指针的信息va_list ap;char *prompt;int sum = 0;//开始的初始化,其中ap含有指向可变参数的指针的信息,count是当前函数中最后一个非可变的参数(这样才能定位).va_start(ap, count);//获取并返回下一个可变参数的值,第一个参数是ap不用说了,第二个参数是要获取的参数的类型。//根据文档,如果类型指定错误了,或者没有下一个可变参数了,那么返回的结果是随机的。prompt = va_arg(ap, char *);printf("%s\n", prompt);int i;for (i = 0; i < count; ++i) {sum += va_arg(ap, int);}//使用完可变参数之后要用这个来释放资源va_end(ap);printf("%d\n", sum);}

测试结果:

http://www.lryc.cn/news/280971.html

相关文章:

  • centos7下升级openssh9.4p1及openssl1.1.1v版本
  • vue+element弹窗内---下拉框定位问题解决(方法之两种)
  • MATLAB二维与三维绘图实验
  • usb个人总结
  • 进阶Docker2:数据卷和挂载目录
  • SHAP:最受欢迎、最有效的可解释人工智能工具包
  • 语境化语言表示模型-ELMO、BERT、GPT、XLnet
  • 和MATLAB相关的设置断点的快捷键
  • 实人认证(人像三要素)API:加强用户身份验证
  • 美易官方:一路火到2024!英伟达还在创造历史
  • 6个免费/商用图片素材网站
  • Java使用IText生产PDF时,中文标点符号出现在行首的问题处理
  • npx和npm有什么区别,包管理器yarn的使用方法,node的版本管理工具nvm使用方法
  • 【网络技术】【Kali Linux】Wireshark嗅探(九)安全HTTP协议(HTTPS协议)
  • POI-tl 知识整理:整理3 -> 动态生成表格
  • chatgpt和文心一言哪个更好用
  • 移动端开发进阶之蓝牙通讯(一)
  • 一个完整的流程表单流转
  • 2024杭州国际智慧城市,人工智能,安防展览会(杭州智博会)
  • 编程笔记 html5cssjs 031 HTML视频
  • SpringBoot外部配置文件
  • 99个Python脚本实用实例
  • HarmonyOS 工程目录介绍
  • 门店管理系统驱动智慧零售升级
  • Iterator迭代器操作集合元素时,不能用集合删除元素
  • Spring Boot是什么-特点介绍
  • 相机成像之图像传感器与ISP【四】
  • 新手入门Java 方法带参,方法重载及面向对象和面向过程的区别介绍
  • 使用Sqoop将Hive数据导出到TiDB
  • 互联网上门洗衣洗鞋工厂系统搭建;