C++函数参数小结

来源:互联网 发布:美团大众数据 编辑:程序博客网 时间:2024/06/01 10:39

一、函数形参指针参数和数组参数的区别

  • 作为函数形参的数组和指针可以互换  
  • 这种转换仅限于函数形参的声明
这是一种便利,传递时数组会蜕变为指针,事实上数组从来没有传入过函数。
例子:以下3个声明是等价的
 void putValues(int *);
 void putValues(int[]);
 void putValues(int[10]);
备注:数组长度不是参数类型的一部分。函数和编译器都不知道传统给它的数组的长度的大小。
  • 传入指定长度数组的一种简便方法
   将参数声明为数组的引用,此时,数组长度成为形参和实参的一部分。例如:void putValues( int (&arr)[10])


二、默认参数值

  • 默认参数值是一种在大多数情况下都适用的值。
  • 函数声明可为全部或者部分参数提供默认值。
  • 函数调用的实参按位置解析,默认参数只能用来替换函数调用缺少的尾部实参。
  • 一个参数只能在一个文件里被指定一次默认实参。函数后续的声明中可以指定其他默认参数。可以在函数声明和定义处定义默认参数值。
  • 默认参数可以用任意表达式指定。

例如:

---------------------ff1.h-----------------------------

 intff(int a, int b,int c=0);

--------------------ff2.h------------------------------

 #include “ff1.h”

 intgetValue();

 intff(int a, int b =getValue(), c);

--------------------ff2.cpp------------------------------

 #include “ff2.h”

intff(int a=0, int b,int c)

{

}


三、可选形参
   有时候无法列出传递给参数的所有实参的类型和数目,此时可以用可选形参(省略号)来声明函数。它将挂起类型检查机制。

实现可选形参的步骤

1,包含头文件stdarg.h

2,使用va_start,va_end,va_arg来操作。va_start使argp指向第一个可选参数。va_arg返回参数列表中的当前参数并使argp指向参数列表中的下一个参数。va_endargp指针清为NULL。函数体内可以多次遍历这些参数,但是都必须以va_start开始,并以va_end结尾。

例子:

---------------------- 1、演示如何使用参数个数可变的函数,采用ANSI标准形式----------------------

#include< stdio.h
#include <
string.h
#include <
stdarg.h>

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

intdemo( char *, ... );

voidmain( void ) 

printf("%d",demo("DEMO","This", "is", "a", "demo!","/0")); 
}

/*ANSI标准形式的声明方式,括号内的省略号表示可选参数*
intdemo( char *msg, ...) 

va_listargp;/*定义保存函数参数的结构*
intargno= 0; /*纪录参数个数*
char *
para;/*存放取出的字符串参数*/


/*argp指向传入的第一个可选参数, 
msg是最后一个确定的参数*/
va_start(argp,msg);

while(1) { 
  
para =va_arg(argp,char *); /*  取出当前的参数,类型为char*. */ 
   if (
strcmp(para,"/0") == 0 ) 
/*
采用空串指示参数输入结束*
   break; 
  
printf("Parameter#%d is: %s/n",argno,para); 
argno++; 

va_end(argp); /*argp置为NULL*/
return
argno;
}

-------------------------------------------------------------------------------

-----------------------2 演示如何使用格式化参数----------------------------

#include< stdio.h
#include <
string.h
#include <
stdarg.h>
void demo( char *, ... );

voidmain( void ) 

demo(("There has %d string !"),1); 
}

/*ANSI标准形式的声明方式,括号内的省略号表示可选参数*
void demo( char *
msg, ...) 

va_listargp;/*定义保存函数参数的结构*
intargno= 0; /*纪录参数个数*
char
para[255];/*存放取出的字符串参数*/

     /*
argp指向传入的第一个可选参数, 
msg是最后一个确定的参数*/
va_start(argp,msg);
  
vsprintf(para,msg,argp);    //把参数值写入字符串
    
printf("%s",para);
va_end(argp); /*argp置为NULL*/

-------------------------------------------------------------------------



原创粉丝点击