c语言中什么是参数

 我来答
户如乐9318
2022-07-21 · TA获得超过6641个赞
知道小有建树答主
回答量:2559
采纳率:100%
帮助的人:137万
展开全部

  如何写可变参数的C函数以及这些可变参数的函数编译器是如何实现的呢?下面是我为大家整理的关于c语言的参数介绍及使用,希望可以帮到大家哦。

  简单的可变参数的C函数

  下面我们来探讨如何写一个简单的可变参数的C函数.写可变参数的C函数要在程序中用到以下这些宏:

  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中,所以用到可变参数的程序应该包含这个头文件.下面我们写一个简单的可变参数的函数,改函数至少有一个整数参数,第二个参数也是整数,是可选的.函数只是打印这两个参数的值.

  void simple_va_fun(int i, ...)

  {

  va_list arg_ptr;

  int j=0;

  va_start(arg_ptr, i);

  j=va_arg(arg_ptr, int);

  va_end(arg_ptr);

  printf(%d %dn, i, j);

  return;

  }

  我们可以在我们的头文件中这样声明我们的函数:

  extern void simple_va_fun(int i, ...);

  我们在程序中可以这样调用:

  simple_va_fun(100);

  simple_va_fun(100,200);

  从这个函数的实现可以看到,我们使用可变参数应该有以下步骤:

  1)首先在函数里定义一个va_list型的变量,这里是arg_ptr,这个变量是指向参数的指针.

  2)然后用va_start宏初始化变量arg_ptr,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定的参数.

  3)然后用va_arg返回可变的参数,并赋值给整数j. va_arg的第二个参数是你要返回的参数的类型,这里是int型.

  4)最后用va_end宏结束可变参数的获取.然后你就可以在函数里使用第二个参数了.如果函数有多个可变参数的,依次调用va_arg获取各个参数.

  如果我们用下面三种 方法 调用的话,都是合法的,但结果却不一样:

  1)simple_va_fun(100);

  结果是:100 -123456789(会变的值)

  2)simple_va_fun(100,200);

  结果是:100 200

  3)simple_va_fun(100,200,300);

  结果是:100 200

  我们看到第一种调用有错误,第二种调用正确,第三种调用尽管结果正确,但和我们函数最初的设计有冲突.下面一节我们探讨出现这些结果的原因和可变参数在编译器中是如何处理的.

  可变参数在编译器中的处理

  我们知道va_start,va_arg,va_end是在stdarg.h中被定义成宏的,由于1)硬件平台的不同 2)编译器的不同,所以定义的宏也有所不同,下

  面以VC++中stdarg.h里x86平台的宏定义摘录如下(''号表示折行):

  typedef char * va_list;

  #define _INTSIZEOF(n)

  ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) )

  #define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )

  #define va_arg(ap,t)

  ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式