成都网站建设设计

将想法与焦点和您一起共享

C语言之认识可变参数-创新互联

printf()的原型是int printf(const char *fmt, ...);后面三个 . 表示C语言的变参。

创新互联公司专注于神池网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供神池营销型网站建设,神池网站制作、神池网页设计、神池网站官网定制、微信小程序开发服务,打造神池网络公司原创品牌,更为您提供神池网站排名全网营销落地服务。

 那么什么是变参?它有什么功能和作用呢?

 变参就是参数不确定,可以随意根据需要来改变的参数。

 我们先举一个固定参数列表的函数:

int swap(int a,int b)

{

  int c;

  c=a;

  a=b;

  b=c;

  return a;

}

 这是随便写的一个函数,虽然由于里面全都是局部变量的原因所以并不能交换参数,但是这个函数的形式还是挺不错的。

 再举例一个可变参数列表函数:

void names(int a , ...)

{

  ……

}

 反正只是定义一个而已,里面的内容就省略了。大家可以看到,下一个参数可以是任意的参数,但是局部变量可知,所有参数的值在调用时要被复制给栈中的连续内存,所以必须有一个普通变量来寻址后续的可变参数的类型和地址。

 也就是说,在使用C语言的变参时,需要将变参,也就是...放在最后一个参数的位置,并且变参前面至少要有一个普通的参数。

 这里有一个例子:

#include

#include

void func1(const char * str1, ...)

{

  char   *pp;

  pp = ((char*)&str1) + sizeof(str1);

  printf("%d\n", *(int*)pp);

  pp =  pp + sizeof(int);

  printf("%d\n", *(int*)pp);

  pp =  pp + sizeof(int);

  printf("%s\n", *((char**)pp));

}

int main()

{

  func1("%d %d %s\n", 4, 5, "hello world");

return 0;

}

  这个函数其实是不对的,原因就是里面存在内存对齐这个问题,但是作为认识和了解可变参数已经足够了。

  这里的const char * str1实际上指向了一个待打印输出的字符串。

现在先了解到这里,以后真正用到的时候再详细讨论。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网站标题:C语言之认识可变参数-创新互联
文章路径:http://chengdu.cdxwcx.cn/article/dsdjjj.html