我在C中有一个函数,它接受一堆参数,我想将这些参数视为数组并按数字访问它们。例如,假设我想从6到1加6个参数,并增加相应的参数。我能做到:
void myFunc(int arg1,int arg2,int arg3,int arg4,int arg5,int arg6,n)
{
if (n==1) ++arg1;
else if (n==2) ++arg2;
else if (n==3) ++arg3;
else if (n==4) ++arg4;
else if (n==5) ++arg5;
else if (n==6) ++arg6;
}
但那有点乱。有没有更简洁的方法来做到这一点?
答案 0 :(得分:6)
虽然在评论中建议传递指向数组的指针可能更容易。如果你真的想参与争论,那么最好的选择可能是使用变量函数:
void myFunc(int n, ...)
{
va_list ap;
int arg;
va_start(ap, n);
while (--n)
arg = va_arg(ap, int); /* Increments ap to the next argument. */
va_end(ap);
arg++;
}
答案 1 :(得分:4)
我会这样做:
void myFunc(int n, ...)
{
va_list args;
va_start(args, n);
int temp;
for(n; n; --n)
{
temp = va_arg(vl, int);
}
temp++;
va_end(args);
}
有几点需要注意:
答案 2 :(得分:2)
您可以使用指向参数的临时指针数组,然后可以通过此指针数组访问它们:
void myFunc(int arg1,int arg2,int arg3,int arg4,int arg5,int arg6,n)
{
int *array_of_args[] = {&arg1, &arg2, &arg3, &arg4, &arg5, &arg6};
if (n >= 1 && n <= 6)
++*array_of_args[n - 1];
}
这并不比原始代码好,但是如果你的代码多次使用数组访问,那么这个hack会使代码更小。
答案 3 :(得分:1)
将您的参数作为数组传递。在这里,我只使用了文字,但您可以将1,2,3,4
替换为您自己的变量,例如arg1, arg2
,依此类推。
int myNumbers[] = { 1, 2, 3, 4 };
myFunc(myNumbers, sizeof myNumbers / sizeof myNumbers[0]);
然后,您的函数需要准备好接受数组。而且,我们可以编写一个for循环,而不是使用六个if来检查六个参数。但是,这与问题完全无关,我理解你可能正在为课堂作业做这件事。
void myFunc(int *args, int numArgs)
{
int i = 0;
for(i; i < numArgs; i++)
{
if(args[i] == i+1) ++args[i];
}
}