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

重庆网站营销公司友情链接平台站长资源

重庆网站营销公司,友情链接平台站长资源,360网站seo怎么做,做智能家居网站需要的参考文献C 中可变参数的函数有两种类型: type func(...) type func(type,...) 可变参数顾名思义就是函数的参数数目或者类型是不确定的,对于这种该如何获取传递的参数的值,这就需要对C,C的函数栈结构有一定的了解。下面就直接进入…

C++ 中可变参数的函数有两种类型:

type    func(...)

type   func(type,...)

可变参数顾名思义就是函数的参数数目或者类型是不确定的,对于这种该如何获取传递的参数的值,这就需要对C,C++的函数栈结构有一定的了解。下面就直接进入实战分析:

#include<iostream>
#include<cstdarg>
using namespace std;void func(...);
void func2(intnfirst,...);void main()
{cout<<"Thisis func:"<<endl;func(1,2,3,5,6,-1);cout<<"Thisis func2:"<<endl;func2(0,7,4,-1);
}void func(...)
{va_list list;va_start(list,list);list = list + 12;  //只?所¨´以°?加¨®12的Ì?原-因°¨°从䨮临¢¨´时º¡À变À?量¢?地Ì?址¡¤到Ì?第̨²一°?个?参?数ºy之?间?有®D12个?字Á?节¨²。¡êint n =0;std::cout<<n<<endl;while(n!= -1){n = va_arg(list,int);std::cout<<n<<endl;}va_end(list);
}void func2(intnfirst,...)
{va_list list;va_start(list,nfirst);int n =0;while(n!=-1){n = va_arg(list,int);std::cout<<n<<endl;}
}


函数的运行结果:

关于可变参数的剖析,步骤

头文件 #include<cstdarg>

宏定义 va_list,va_start,va_arg,va_end

步骤:

1  va_list ap

标识一个数据结构,ap用来存放可变参数信息。

2 va_start(ap,v);

这个宏用来初始化可变参数列表。ap表示初始化的数据结构,它里面存放着后面的可变参数信息。 v标识函数声明中最后一个具有名字的参数,也就是...之前的那个参数。

3 va_arg(ap,t);

获取可变参数,t是参数的类型。用这个函数来获取后面的可变参数的值。

int xx;

xx = va_arg(ap,int);

4 va_end(ap);

这个宏用来宣告可变参数调用的结束,要用在最后面。

 

再来看宏的解释:

1  typedef char *  va_list;

说明va_list 是一个char*类型的。

#define va_start  _crt_va_start

#define_crt_va_start(ap,v)  ( ap =(va_list)_ADDRESSOF(v) + _INTSIZEOF(v) )

#define _ADDRESSOF(v)   ( &reinterpret_cast<constchar&>(v) )

#define _INTSIZEOF(n)   ( (sizeof(n)+sizeof(int) -1) & ~(sizeof(int)- 1) )

这个是为了内存对齐。什么叫做内存对齐呢?我们知道任何正整数都可以表达为

x = n*q + r , ( 0≤r<q ),

对齐就是要当r = 0 时,x = n*q。当 r>0 时候,x = ( n + 1 )*q

所以对于最终要求的结果 x ,我们可以得出这样的表达式:

x = n*q + r ,  ( -q<r≤0 )

方程的两边都加上 q-1 得:

x + q - 1 = n*q + (r + q - 1), ( 0≤r + q - 1<q )

其中的n*q 就是我们最终要求的结果,那么n*q的结果就可以表示为:

(x + q - 1)/q*q = n*q.

如果 q是2进制的整数次幂,事情就更加好办了. 假设 q = 2^k,那么只需要把(x + q - 1)的0-m-1次位清零即可。即:

(x + q -1 )&~(q-1).

从以上可以得出va_list 是为了得出可变参数中第一个元素的地址,从这里也可以看出,参数v必须是命名参数中的最后一个参数。

#define va_arg _crt_va_arg

#define_crt_va_arg(ap,t)    ( *(t *)((ap +=_INTSIZEOF(t)) - _INTSIZEOF(t)) )

(ap +=_INTSIZEOF(t))   //实现ap的值偏移

(ap +=_INTSIZEOF(t)) - _INTSIZEOF(t))   //实现把地址定位到参数的指向地址

(t *)((ap +=_INTSIZEOF(t)) - _INTSIZEOF(t))              //强制类型转换成参数的类型

( *(t*)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) ) //取出参数的值

#defineva_end _crt_va_end

#define_crt_va_end(ap)      ( ap = (va_list)0 )

最后这个简单了,就是清理门户,让ap不再指向栈中内存。

 


http://www.lbrq.cn/news/2452987.html

相关文章:

  • 不会被封的网站谁做如何让自己网站排名提高
  • 淮安网站建设制作网络营销企业有哪些公司
  • 太仓公司做网站潍坊网站建设
  • 怎么做英文垃圾网站怎么自己弄一个网站
  • 深圳哪里有做网站推广的搜狗搜索排名优化
  • 织梦儿童早教教育培训网站模板石家庄seo
  • 58同城给做网站seo网站快速排名
  • 制作手机网页教程网络seo
  • 打开网站notfound企业网站seo点击软件
  • 类似于kobas的网站做kegg分析新闻头条最新
  • 2021建站公司营销推广投放平台
  • 为什么不能用来名字做网站名拓客软件
  • 网站建设公司简介企业产品推广运营公司
  • 中国建设银行的网站免费的网站推广
  • 知名网站开发买卖交易平台
  • 鄂州建设网站竞价推广思路
  • 上海做网站的自建站模板
  • 无锡网站建设设计国内比较好的软文网站
  • wordpress本地打开慢google seo整站优化
  • 吉安律师网站建设企业员工培训课程有哪些
  • 郑州市建设网站谷歌seo关键词优化
  • 网站建设403怎么去推广一个产品
  • 会员卡管理系统多少钱宁波seo外包代运营
  • 网络规划设计师的意义厦门网站综合优化贵吗
  • discuz做影视网站重庆seo搜索引擎优化优与略
  • 钓鱼转转网站在线生成软件一键优化清理加速
  • 大连手机自适应网站建设服务市场推广策略 包括哪些
  • 做网站多少人公司官网开发制作
  • 寿光网站建设公司快速优化网站排名软件
  • 最大的房产网站排名app推广之家
  • JVM-GC 相关知识
  • Python编程:初入Python魔法世界
  • 智慧水库管理平台数据清洗实施方案
  • 基于MySQL实现基础图数据库
  • uniapp 自定义tab栏切换
  • NodeJS搭建SSE接口服务