将输入传递到输入列表中的函数而不用C

时间:2016-08-11 09:15:42

标签: c

假设我有一个功能:

void add(int a, int b , int c);

我有一个包含3个整数值的数组:

int L[] = {1,2,3};

现在我想传递这些值而不写add(L[0],L[1],L[2]). 我的意思是有一种方法可以从多个输入创建单个输入并将其传递给将单个输入视为多个输入的函数??。

2 个答案:

答案 0 :(得分:4)

你可以试试这个

        var swiper = new Swiper('.swiper-container', {
            effect:'coverflow',
            pagination: '#progressbar',
            paginationType: 'progress',
            nextButton: '#next-button',
            prevButton: '#prev-button',
            spaceBetween: 30,

            onInit: function (swiper) {
                if (swiper.activeIndex == 0)    swiper.lockSwipeToPrev(); 
                if (swiper.isEnd)               swiper.lockSwipeToNext(); 
            },

            onSlideChangeStart: function (swiper) {
                if (swiper.activeIndex == 0)    swiper.lockSwipeToPrev(); 
                else                            swiper.unlockSwipeToPrev(); 

                if (swiper.isEnd)               swiper.lockSwipeToNext(); 
                else                            swiper.unlockSwipeToNext(); 
            },
        });

,其中

int L[] = {1,2,3};
add(L, 3);

但我不确定你为什么对目前的做法有疑问。

另一种选择可能是将这三个整数封装到一个结构中并传递结构。

答案 1 :(得分:2)

如果您的意思是Python

def foo(a, b, c):
    return a + b + c

x = (1, 2, 3)
print(foo(*x)) # the '*' does the magic of calling foo with 1, 2, 3

然后在便携式C中无法做到这一点。

您可以做的是更改foo的接口以接受一系列参数,例如

int sum(int *data, int n) {
    int tot = 0;
    for (int i=0; i<n; i++) {
        tot += data[i];
    }
    return tot;
}

可以用

来调用它
int x[] = {10, 20, 30, 40};
int res = sum(x, 4);

如果您无法更改函数定义,并且您有许多具有相同签名的函数定义,那么您可以使用函数指针来分解调用:

int sum3(int a, int b, int c) {
    return a+b+c;
}

int mul3(int a, int b, int c) {
    return a*b*c;
}

int call_int_int3(int(*f)(int, int, int), int* args) {
    return f(args[0], args[1], args[2]);
}

...
int data[] = {10, 20, 30};
int sum = call_int_int3(sum3, data);
int prod = call_int_int3(mul3, data);

但是你需要为每个不同的签名(参数的数量和类型以及返回值的类型)使用不同的包装器。