24小时热门版块排行榜    

Znn3bq.jpeg
北京石油化工学院2026年研究生招生接收调剂公告
查看: 589  |  回复: 3
【奖励】 本帖被评价2次,作者yalefield增加金币 1.5

[资源] 【分享】C语言,怎么玩可变参数 已有1人参与

printf()函数原型为:
  int printf( const char* format, ...);
这里面就有可变参数,三个点 ...

  printf("%d",i);
  printf("%s",s);
  printf("the number is %d ,string is:%s", i, s);

这三个点,能应付那么多情况.......羡慕嫉妒恨!

怎样写一个简单的可变参数的C函数

例子:该函数至少有一个整数参数,其后是占位符…,表示后面参数的个数不定.
在这个例子里,所有的输入参数必须都是整数,函数的功能是打印所有参数的值.

  函数代码如下:

  //示例代码1:可变参数函数的使用

  #include "stdio.h"
  #include "stdarg.h"
  void simple_va_fun(int start, ...)
  {
    va_list arg_ptr;
    int nArgValue =start;
    int nArgCout=0; //可变参数的数目

    va_start(arg_ptr,start);
    //以固定参数的地址为起点确定变参的内存起始地址。

    do
    {
      ++nArgCout;
      printf("the %d th arg: %d\n",nArgCout,nArgValue);
      //输出各参数的值
      nArgValue = va_arg(arg_ptr,int);
      //得到下一个可变参数的值
    } while(nArgValue != -1);

    return;
  }

  int main(int argc, char* argv[])
  {
    simple_va_fun(100,-1);
    simple_va_fun(100,200,-1);
    return 0;
  }

  使用可变参数应该有以下步骤:

  ⑴在程序中将用到以下这些宏:

  void va_start( va_list arg_ptr, prev_param );
  type va_arg( va_list arg_ptr, type );
  void va_end( va_list arg_ptr );

  va在这里是variable-argument(可变参数)的意思.

  这些宏定义在stdarg.h中,所以用到可变参数的程序应该包含这个头文件.

  ⑵函数里首先定义一个va_list型的变量,这里是arg_ptr,这个变量是指向参数地址的指针.因为得到参数的地址之后,再结合参数的类型,才能得到参数的值。
  ⑶然后用va_start宏初始化⑵中定义的变量arg_ptr,这个宏的第二个参数是可变参数列表的前一个参数,也就是最后一个固定参数。
  ⑷然后依次用va_arg宏使arg_ptr返回可变参数的地址,得到这个地址之后,结合参数的类型,就可以得到参数的值。然后进行输出。
  ⑸设定结束条件,这里的条件就是判断参数值是否为-1。注意被调的函数在调用时是不知道可变参数的正确数目的,程序员必须自己在代码中指明结束条件
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

stephenliu89

银虫 (小有名气)



小木虫(金币+0.5):给个红包,谢谢回帖交流
受教了啊!貌似谭浩强可没说过这个。。。
2楼2010-09-05 12:09:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

★★★★★ 五星级,优秀推荐

顶老汉!
3楼2010-09-05 17:18:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

magic7004

金虫 (职业作家)


★★★ 三星级,支持鼓励


余泽成(金币+1):鼓励参与讨论! 2010-09-06 11:05:49
不过貌似现在的编程中,可变参数是不推荐使用的,因为这玩意儿不是类型安全的。

其实可变参数能实现的功能,都可以用数组(或指针)代替的。
4楼2010-09-06 09:05:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 yalefield 的主题更新
☆ 无星级 ★ 一星级 ★★★ 三星级 ★★★★★ 五星级
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 306求调剂 +3 15287505595 2026-04-03 3/150 2026-04-07 18:08 by 蓝云思雨
[考研] 材料求调剂 +18 一样YWY 2026-04-05 18/900 2026-04-07 15:49 by dxlg
[考研] 363求调剂 +8 zh096 2026-04-04 8/400 2026-04-07 14:53 by 1104338198
[考研] 070300化学学硕311分求调剂 +12 梁富贵险中求 2026-04-04 12/600 2026-04-06 22:54 by chenzhimin
[考研] 308求调剂 +13 倘若起风了呢 2026-04-05 13/650 2026-04-06 14:20 by 蒋皓禹
[考研] 求调剂!生物与医药专硕 +5 逆转陆先生 2026-04-01 6/300 2026-04-06 12:49 by lys0704
[考研] 一志愿211生物学280分 求调剂 +5 李rien 2026-04-05 5/250 2026-04-06 10:30 by zhyzzh
[考研] 一志愿南昌大学,085600,344分求调剂 +9 调剂上岸玘 2026-04-05 10/500 2026-04-06 09:30 by dongzh2009
[考研] 一志愿 江南大学 085602 化工专硕 338分求调剂 +15 路痴小琪 2026-04-05 15/750 2026-04-06 09:27 by cql1109
[考研] 331求调剂 +8 于征yz 2026-04-05 8/400 2026-04-06 00:54 by fmesaito
[考研] 377求调剂 +6 by.ovo 2026-04-05 6/300 2026-04-05 22:18 by dongzh2009
[考研] 调剂 +3 好好读书。 2026-04-02 3/150 2026-04-05 13:02 by arrow8852
[考研] 电子信息调剂交叉学科有推荐吗 +6 jhtfeybgj 2026-04-01 9/450 2026-04-05 11:13 by 猪会飞
[考研] 材料与化工306分找调剂 +12 沧海轻舟e 2026-04-03 13/650 2026-04-04 23:45 by lqwchd
[考研] 材料科学与工程考研 +10 拯救皮特托先生 2026-04-02 10/500 2026-04-03 23:57 by userper
[考研] 化工求调剂 +11 荔香芝士椰奶 2026-04-03 11/550 2026-04-03 22:06 by 啵啵啵0119
[考研] 学硕288调剂!!! +3 小王xw123 2026-04-03 3/150 2026-04-03 21:20 by 啵啵啵0119
[基金申请] esi高被引论文是不是能对中标有所加分和帮助呢 +5 redcom 2026-04-01 6/300 2026-04-03 15:15 by Howard28
[考研] 08生物与医药专硕初试346找调剂 +6 dianeeee 2026-04-01 7/350 2026-04-02 08:23 by guoweigw
[考研] 一志愿北交材料工程总分358 +5 cs0106 2026-04-01 7/350 2026-04-01 11:45 by wangjy2002
信息提示
请填处理意见