如何作为数组访问函数参数?

时间:2014-01-23 16:17:53

标签: c

我在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;
}

但那有点乱。有没有更简洁的方法来做到这一点?

4 个答案:

答案 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);
}

有几点需要注意:

  • 如果n == 0,则不进行处理,在这种情况下会出错。
  • 因为C是传递值,所以这会在本地增加变量(作为原始函数),但更改不会在函数外生效!

答案 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];
    }
}
相关问题