C语言 函数不定长参数 - C语言零基础入门教程

目录

  • 一.前言
  • 二.函数不定长参数简介
    • 1.va_start
    • 2.va_arg
    • 3.va_end
  • 三.自定义不定长参数的函数
    • 1.va_start/va_arg/va_end 案例一
    • 2.va_start/va_arg/va_end 案例二
  • 四.猜你喜欢

零基础 Python 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

一.前言

printf 函数的使用,我们并不陌生,首先我们来看看下面关于 printf 函数的几种调用方式:

printf("hello world");
printf("%s","hello world");
printf("%s %s","hello world","C语言教程-猿说编程");
printf("%d",3);
printf("%d %d",3,6);
printf("%d %d %d ",1,2,3);

灵魂拷问:

  • 1.printf 函数到底参数是什么类型?
  • 2.printf 函数到底有几个参数?

二.函数不定长参数简介

关于 C 语言的不定长参数使用,必然离不开三个宏:va_startva_argva_end

#include <stdarg.h>
#define va_start __crt_va_start
#define va_arg   __crt_va_arg
#define va_end   __crt_va_end

1.va_start

#include <stdarg.h>//必须包含头文件
/*
*   arg_ptr 指向函数参数列表中的第一个可选参数
*   argN  是位于第一个可选参数之前的固定参数, 或者说最后一个固定参数
*/
va_start(arg_ptr, argN)

2.va_arg

#include <stdarg.h>//必须包含头文件
/*
*   返回参数列表中指针arg_ptr所指的参数, 返回类型为type.
*   并使指针arg_ptr指向参数列表中下一个参数.
*   返回的是可选参数, 不包括固定参数.
*/
va_arg(arg_ptr, type)

3.va_end

#include <stdarg.h>//必须包含头文件
/*
*   清空参数列表, 并置参数指针arg_ptr无效.
*/
va_end(arg_ptr)

三.自定义不定长参数的函数

1.va_start/va_arg/va_end 案例一

/************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言 函数不定长参数
//@Time:2021/06/23 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/************************************************************************/#include <stdio.h>
#include <stdarg.h>void WriteFrmtd(char *format, ...)
{va_list args;va_start(args, format);vprintf(format, args);va_end(args);
}
int main ()
{WriteFrmtd("%d variable argument\n", 1);WriteFrmtd("%d variable %s\n", 2, "arguments");return(0);
}
输出:
1 variable argument
2 variable arguments

2.va_start/va_arg/va_end 案例二

/************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言 函数不定长参数
//@Time:2021/06/23 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/************************************************************************/#include "stdafx.h"
#include <stdio.h>
#include <stdarg.h>
//c参数类型,参数个数不确定。
//自定义方法
int Sum(int Num, ...)
{int S = 0, T;va_list ap;va_start(ap, Num);for (int i = 0; i<Num; ++i){T = va_arg(ap, int); S += T;}return S;
}
void myPrintf(int Num, ...)
{va_list ap;va_start(ap, Num);for (int i = 0; i<Num; i++){//va_arg 返回值是不固定参数,所以第一个值是"dsdsdss"并非2char *T = va_arg(ap, char*);printf("myPrintf:%s\n", T);}
}
int main()
{int n;myPrintf(2, "dsdsdss", "sdaddd");printf("%d\n", Sum(10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10));return 0;
}
输出:
myPrintf:dsdsdss
myPrintf:sdaddd
55
*/

四.猜你喜欢

  1. C 语言逻辑运算符
  2. C 语言三目运算符
  3. C 语言逗号表达式
  4. C 语言 sizeof 和 strlen 函数区别
  5. C 语言 strcpy 和 strcpy_s 函数区别
  6. C 语言 memcpy 和 memcpy_s 区别
  7. C 语言 数组定义和使用
  8. C 语言 数组遍历
  9. C 语言 数组下标越界
  10. C 语言 数组内存溢出
  11. C 语言 数组下标越界和内存溢出区别
  12. C 语言 二维数组定义和使用
  13. C 语言 二维数组行数和列数计算
  14. C 语言 指针声明和定义
  15. C 语言 指针 p++ / p–
  16. C 语言 p++/§++/_(p++)/_p++
  17. C 语言 使用指针遍历数组
  18. C 语言 指针和数组区别
  19. C 语言 数组指针
  20. C 语言 指针数组
  21. C 语言 指针数组和数组指针区别
  22. C 语言 空指针 NULL
  23. C 语言 void 指针
  24. C 语言 野指针
  25. C 语言 函数声明和定义
  26. C 语言 函数声明和调用
  27. C 语言 函数值传递和址传递
  28. C 语言 函数缺省参数
  29. C 语言 函数不定长参数

未经允许不得转载:猿说编程 » C 语言 函数不定长参数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/524908.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jq之$(“[href]“)

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jquery.com/jquery-3.4.1.min.js"></script><scrip…

五分钟解读“大数据”

戳蓝字“CSDN云计算”关注我们哦&#xff01;文章来自&#xff1a;鲜枣课堂作者&#xff1a;小枣君大家好&#xff0c;我是小枣君。2019年的第一篇文章&#xff0c;我们来聊聊大数据。这些年&#xff0c;大数据作为一个时髦概念&#xff0c;出现频率很高&#xff0c;关注度也很…

C语言 函数指针 - C语言零基础入门教程

目录 一.函数指针简介 1.常规函数声明2.函数指针声明 二.函数指针实战三.猜你喜欢 零基础 Python 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.函数指针简介 函数指针&#xff0c;其本质是一个指针&#xff0c;指向的是一个函数的地址。 基本声明形式&#xff1…

jq之$(“a[target=‘_blank‘]“)

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jquery.com/jquery-3.4.1.min.js"></script><scrip…

数据版吐槽大会: 国产综艺节目年终盘点

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者介绍&#xff1a;徐麟&#xff0c;目前就职于互联网公司数据部&#xff0c;哥大统计数据狗&#xff0c;从事数据挖掘&分析工作&#xff0c;喜欢用R&Python玩一些不一样的数据个人公众号&#xff1a;数据森麟&#xff08…

jq设置内容和属性

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jquery.com/jquery-3.4.1.min.js"></script><scrip…

C语言 指针函数 - C语言零基础入门教程

目录 一.指针函数简介 1.常规函数声明2.指针函数声明 二.指针函数实战三.猜你喜欢 零基础 Python 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.指针函数简介 指针函数&#xff0c;即返回指针的函数&#xff0c;其本质是一个函数&#xff0c;而该函数的返回值是一…

2018全球50大最佳发明名单

戳蓝字“CSDN云计算”关注我们哦&#xff01;来自&#xff1a;全国3D大赛提起发明创造&#xff0c;你会想到什么&#xff1f;每年《时代周刊》都会评选年度最佳发明&#xff0c;它们让世界变得更美好&#xff0c;更智能&#xff0c;或更有趣。Time 从世界各地征集了各类别的提名…

jq之attr()

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jquery.com/jquery-3.4.1.min.js"></script><scrip…

虚拟化精华问答 | 什么是虚拟化?

戳蓝字“CSDN云计算”关注我们哦&#xff01;虚拟化是云计算的基础&#xff0c;基于虚拟化我们可以实现私有云、公有云、桌面云等。它的主要目的是对IT基础设施进行简化&#xff0c;简化对资源以及对资源管理的访问。那么今天就让我们一起就来探究云计算关键技术「虚拟化技术」…

jq之val()

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jquery.com/jquery-3.4.1.min.js"></script><scrip…

C语言 函数指针和指针函数区别 - C语言零基础入门教程

目录 一.函数指针和指针函数声明的区别 1.函数指针2.指针函数 二.函数指针和指针函数调用的区别 1.函数指针的调用2.指针函数的调用 三.猜你喜欢 零基础 Python 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.函数指针和指针函数声明的区别 1.函数指针 函数指针&…

jq之text() html()

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jquery.com/jquery-3.4.1.min.js"></script><scrip…

要闻君说:难道金山云与京东云真的要合并了吗?中国联通获准发行不超过500亿元公司债券,都用于5G 商用?用AI技术精准来找室友?...

关注并标星星CSDN云计算每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 嗨&#xff0c;大家好&#xff01;偶是要闻君。愉快的周一从“听歌看新闻”开始啦&#xff01;文/要闻君图片来源网络近日&#xff0c;阿里巴巴宣布推出“A100”战略合作伙伴计划&a…

C语言 回调函数 callback - C语言零基础入门教程

目录 一.回调函数原理二.回调函数简介 1.函数指针2.指针函数3.回调函数解释 三.回调函数实战四.回调函数使用总结五.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.回调函数原理 你到商店买东西&#xff0c;刚好你要的东西没有货&#xff0c;…

jq之blur

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jquery.com/jquery-3.4.1.min.js"></script><scrip…

对不起,我就是喜欢问你Spring构造器注入原理

戳蓝字“CSDN云计算”关注我们哦&#xff01;文章来自&#xff1a;Java和Android架构作者&#xff1a;Static_lin原文&#xff1a;https://blog.csdn.net/qq_41737716/article/details/85596817前言Spring IOC是面试常问的知识点。本文讲述了从自定义注册Bean开始&#xff0c;到…

C语言 typedef - C语言零基础入门教程

目录 一.typedef 简介二.typedef 实战 1.typedef 定义基本数据变量2.typedef 定义结构体 A.常规定义结构体B.typedef 定义结构体C.结构体使用 typedef 和不使用 typedef 区别 3.typedef 定义函数指针 三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础…

jq之hover()

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jquery.com/jquery-3.4.1.min.js"></script><scrip…

华为云发布新slogan,新年伊始加速奔跑

人工智能作为下一轮科技革命的关键元素&#xff0c;正在进入越来越多的行业&#xff0c;用AI的技术和理念去解决现在和未来的问题&#xff0c;将是企业构建竞争力的关键。 人工智能时代&#xff0c;最有技术和值得信赖的云 1月11日&#xff0c;“华为云普惠AI”年度峰会在北京…