background image

的地址呢?不知道你注意到没有,参数可变函数在可变参数之前必有一个参数是固定的 ,
并使用标识符,而且通常被声明为 char*类型,printf 函数也不例外。这样的话,我们就可
以通过这个参数对应的标识符来得到地址,从而访问其他参数变得可能。我们可以写一个
测试程序来试一下:

#include <stdio.h>

 

void va_test(char* fmt,...);//参数可变的函数声明

 

void main()

{

    int a=1,c=55;

       char b='b';

    va_test("",a,b,c);//用四个参数做测试

}

 

void va_test(char* fmt,...) //参数可变的函数定义,注意第一个参数为 char* fmt

{

   char *p=NULL;

 

      p=(char *)&fmt;//注意不是指向 fmt,而是指向&fmt,并且强制转化为 char *,以便一个
一个字节访问

      for(int i = 0;i<16;i++)//16 是通过计算的值(参数个数*4 个字节),只是为了测试,暂
且将就一下

      {

                printf("%.4d ",*p);//输出 p 指针指向地址的值