b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

c strchr函数_c语言strchr函数_c strchr函数自定义(2)

电脑杂谈  发布时间:2017-02-21 22:18:53  来源:网络整理

注意,可变参数只能位于函数参数表的最后。不能这样:

void MyFunc(…, int i);

2、采用与UNIX 兼容系统下的声明方式时,参数个数可变的函数原型是:

type funcname(va_alist);

但是要求函数实现的时候,函数名字后面必须加上va_dcl。例如:

#include

int average( va_list );

void main( void )

{

。。。//代码

}

/* UNIX兼容形式*/

int average( va_alist )

va_dcl

{

。。。//代码

}

这种形式不需要提供任何普通的形式参数。type是函数返回值的类型。va_dcl是对函数原型声明中参数va_alist的详细声明,实际是一个宏定义。根据平台的不同,va_dcl的定义稍有不同。

在varargs.h中,va_dcl的定义后面已经包括了一个分号。因此函数实现的时候,va_dcl后不再需要加上分号了。

3、采用头文件stdarg.h编写的程序是符合ANSI标准的,可以在各种操作系统和硬件上运行;而采用头文件varargs.h的方式仅仅是为了与以前的程序兼容,两种方式的基本原理是一致的,只是在语法形式上有一些细微的区别。 所以一般编程的时候使用stdarg.h。c strchr函数下面的所有例子代码都采用ANSI标准格式。

四、可变参数函数的基本使用方法

下面通过若干例子,说明如何实现可变参数函数的定义和调用。

//================================ 例子程序1 ===============

#include < stdio.h >

#include < string.h >

#include < stdarg.h >

/* 函数原型声明,至少需要一个确定的参数,注意括号内的省略号 */

int demo( char *, … );

void main( void )

{

demo(”DEMO”, “This”, “is”, “a”, “demo!”, “\0″);

}

int demo( char *msg, … )

{

va_list argp; /* 定义保存函数参数的结构 */

int argno = 0; /* 纪录参数个数 */

char *para; /* 存放取出的字符串参数 */

// 使用宏va_start, 使argp指向传入的第一个可选参数,

// 注意 msg是参数表中最后一个确定的参数,并非参数表中第一个参数

va_start( argp, msg );

while (1)

{

//取出当前的参数,类型为char *

//如果不给出正确的类型,将得到错误的参数

para = va_arg( argp, char *);

if ( strcmp( para, “\0″) == 0 ) /* 采用空串指示参数输入结束 */

break;

printf(”参数 #%d 是: %s\n”, argno, para);

argno++;//注意:栈底在高地址,栈顶在低地址,所以这里是++

}

va_end( argp ); /* 将argp置为NULL */

return 0;

}

//输出结果

参数 #0 是: This

参数 #1 是: is

参数 #2 是: a

参数 #3 是: demo!

注意到上面的例子没有使用第一个参数,下面的例子将使用所有参数

//================================ 例子程序2 ===============


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-33745-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 黄义达
      黄义达

      驻日美军和周边美军不会在旁看热闹

    热点图片
    拼命载入中...