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

高中教学网站环保工程 技术支持 东莞网站建设

高中教学网站,环保工程 技术支持 东莞网站建设,新冠咳嗽一般要咳多少天,重庆专业网站推广公司转载自#xff1a;http://blog.csdn.net/tht2009/article/details/7019635 变长参数 设计一个参数个数可变、参数类型不定的函数是可能的#xff0c;最常见的例子是printf函数、scanf函数和高级语言的Format函数。在C/C中#xff0c;为了通知编译器函数的参数个数和类型可变…转载自http://blog.csdn.net/tht2009/article/details/7019635 变长参数 设计一个参数个数可变、参数类型不定的函数是可能的最常见的例子是printf函数、scanf函数和高级语言的Format函数。在C/C中为了通知编译器函数的参数个数和类型可变(即是不定的、未知的)就必须以三个点结束该函数的声明。 // printf函数的声明int printf(const char * _Format, ...);//scanf函数声明int scanf(const char * _Format, ...);//自定义变长参数函数func的声明int func(int a,int b,...);上面func函数的声明指出该函数至少有两个整型参数和紧随其后的0个或多个类型未知的参数。在C/C中任何使用变长参数声明的函数都必须至少有一个指定的参数(又称强制参数)即至少有一个参数的类型是已知的而不能用三个点省略所有参数的指定且已知的指定参数必须声明在函数最左端。 int func(...);//错误 int func(...,int a);//错误 变长参数函数的实现 含有变长参数的函数是怎么实现的呢变长参数函数的实现其实关键在于怎么使用参数指定了的参数好说直接使用指定的参数名称访问但未指定的参数呢我们知道函数调用过程中参数传递是通过栈来实现的一般调用都是从右至左的顺序压参数入栈因此参数与参数之间是相邻的知道前一个参数的类型及地址根据后一个参数的类型就可以获取后一个参数的内容。对于变长参数函数结合一定的条件我们可以根据最后一个指定参数获取之后的省略参数内容。如对于函数func我们知道了参数b的地址及类型就可知道第一个可变参数的栈地址(如果有的话)如果知道第一个可变参数的类型就可知道第一个可变参数的内容和第二个可变参数的地址(如果有的话)。以此类推可以实现对可变参数函数的所有参数的访问。 那么要怎么指定上诉的“一定的条件”呢最简单的方法就像printf等函数一样使用格式化占位符。分析格式化字符串参数通过事先定义好的格式化占位符可知可变参数的类型及个数从而获取各个参数内容。一般对于可变参数类型相同的函数也可直接在强制参数中指定可变参数的个数和类型这样也能获取各个参数的内容。 无论哪种都涉及对栈地址偏移的操作。结合栈存储模式和系统数据类型的字长我们可根据可变参数的类型很容易得到栈地址的偏移量。这里简单介绍使用va_start、va_arg、va_end三个标准宏来实现栈地址的偏移及获取可变参数内容。这三个宏定义在stdarg.h头文件中他们可根据预先定义的系统平台自动获取相应平台上各个数据类型的偏移量。 va_list args; //定义一个可变参数列表 va_start(args,arg);//初始化args指向强制参数arg的下一个参数; va_arg(args,type);//获取当前参数内容并将args指向下一个参数 ...//循环获取所有可变参数内容 va_end(args);//释放args 实现一个简单的变长参数函数 //sum为求和函数其参数类型都为int,但参数个数不定 //第一个参数强制参数n指定后面有多少可变参数 int sum(unsigned int n,...) { int sum0; va_list args; va_start(args,n); while(n0) { //通过va_arg(args,int)依次获取参数的值 sumva_arg(args,int); n--; } va_end(args); return sum; } 对于可变参数函数的调用有一点需要注意实际的可变参数的个数必须比前面强制参数中指定的个数要多或者不小于也即后续参数多一点不要紧但不能少如果少了则会访问到函数参数以外的堆栈区域这可能会把程序搞崩掉。前面强制参数中指定的类型和后面实际参数的类型不匹配也有可能造成程序崩溃。  变长参数函数与默认参数函数 拥有变长参数的函数在声明定义时其参数个数与类型是不定的在运行调用时参数的状态则是一定的。而默认参数函数在声明定义时其参数类型与个数都是一定的只是后面部分参数指定了默认值可通过省略(不指定)部分参数调用这个默认参数函数。但是默认参数函数还是使用了声明中指定的全部参数只不过编译器做了个顺水人情自动给后部分参数赋了默认值而变长参数函数则仅仅使用了运行调用时提供的参数。
http://www.pierceye.com/news/651465/

相关文章:

  • 门户网站建设计入什么科目网站备案 时间更新
  • 企业建网站租用服务器好还是买一个好wordpress 预订插件
  • 电气建设网站下载的asp网站怎么打开
  • 南阳网站建设icp备手机应用商店免费下载
  • 网站开发测量像素工具网站模板包含哪些内容
  • 南昌网站排名优化费用湖北公众号定制开发
  • 个人主页自助建站凡科网干嘛的
  • 网站后台上传图片不显示品牌营销咨询公司
  • 卖房网站母亲节做什麽活动从传播的角度
  • 永久免费的cad软件seo咨询
  • 网站邮件功能设计理论网站排名软件包年
  • wordpress语言文件编辑专业的企业网站优化公司
  • 正定网站建设制作公司wordpress去掉模板登录
  • 定制开发一个网站多少钱网站开发项目的心得体会
  • 网站被做跳转怎么办个人网站开发软件
  • 湛江网站制作费用南昌建站系统外包
  • 杭州市住房和城乡建设厅网站网页设计个人网站作业
  • 钦州建站哪家好杭州网站建站平台
  • 程序员做笔记的网站在线简历制作系统
  • 有一个网站自己做链接获取朋友位置wordpress504
  • 设计感 网站wordpress企业内网主题
  • 金塔精神文明建设网站上线了小程序制作平台
  • 东莞阳光网站建设成效网站内容营销
  • 阿里云做网站吗深圳香蜜湖街道
  • 营销型网站名词解释关键词有几种类型
  • 高端网站建设浩森宇特Php做网站要求
  • 盐田高端网站建设湖南网站seo营销多少费用
  • 福州建设招聘信息网站东莞房价将暴跌
  • 外包做网站的要求怎么写网站建设调查分析
  • 北京网站建设公司哪个最好鲜花网页设计模板