不定参数,
以下是C的
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
#define va_end(ap) ( ap = (va_list)0 )
<MSDN>
int average( int first, ... )
{
int count = 0, sum = 0, i = first;
va_list er; va_start( er, first ); /* Initialize variable arguments. */
while( i != -1 )
{
sum += i;
count++;
i = va_arg( er, int);
}
va_end( er ); /* Reset variable arguments. */
return( sum ? (sum / count) : 0 );
}
自己改编一下就OK。
以下是C的
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
#define va_end(ap) ( ap = (va_list)0 )
<MSDN>
int average( int first, ... )
{
int count = 0, sum = 0, i = first;
va_list er; va_start( er, first ); /* Initialize variable arguments. */
while( i != -1 )
{
sum += i;
count++;
i = va_arg( er, int);
}
va_end( er ); /* Reset variable arguments. */
return( sum ? (sum / count) : 0 );
}
自己改编一下就OK。
在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字。
示例
// cs_params.cs
using System;
public class MyClass
{ public static void UseParams(params int[] list)
{
for ( int i = 0 ; i < list.Length ; i++ )
Console.WriteLine(list[i]);
Console.WriteLine();
} public static void UseParams2(params object[] list)
{
for ( int i = 0 ; i < list.Length ; i++ )
Console.WriteLine(list[i]);
Console.WriteLine();
} public static void Main()
{
UseParams(1, 2, 3);
UseParams2(1, 'a', "test"); int[] myarray = new int[3] {10,11,12};
UseParams(myarray);
}
}