如何将数组的总元素作为函数的位置参数传递?

时间:2016-09-08 09:58:34

标签: c

我在c:

中有一个数组
int array[] = {1, 2, 3, 4};

我有一个像这样的函数原型:

int add_all(int a, int b, int c, int d);

但是如何一次将数组的所有元素作为函数的参数传递?

我知道在python中,这可以这样做:

array=[1,2,3,4]
add_all(*array)

有人能告诉我如何在C中达到同样的效果吗?

2 个答案:

答案 0 :(得分:4)

试试这个:

#include <boost/preprocessor/arithmetic/add.hpp>
#include <boost/preprocessor/control/while.hpp>
#include <boost/preprocessor/tuple/elem.hpp>
#include <boost/preprocessor/tuple/push_back.hpp>
#include <boost/preprocessor/tuple/reverse.hpp>

#define ARRAY_ELEM(x,n) x[n]

#define PRED(n, state) BOOST_PP_TUPLE_ELEM(3, 1, state)

#define OP(d, state) \
   OP_D( \
      d, \
      BOOST_PP_TUPLE_ELEM(3, 0, state), \
      BOOST_PP_TUPLE_ELEM(3, 1, state), \
      BOOST_PP_TUPLE_ELEM(3, 2, state) \
   ) 

#define OP_D(d, res, c, arr_name) \
   ( \
      BOOST_PP_TUPLE_PUSH_BACK(res,ARRAY_ELEM(arr_name,BOOST_PP_DEC(c))), \
      BOOST_PP_DEC(c), \
      arr_name \
   ) \


#define UNPACK_REVERSE(ARR_NAME,N) \
    BOOST_PP_TUPLE_ELEM( \
      3, 0, \
      BOOST_PP_WHILE(PRED, OP, ((ARRAY_ELEM(ARR_NAME,BOOST_PP_DEC(N))), \
                    BOOST_PP_DEC(N),ARR_NAME) ) \
   )
/*The macro to be called*/
#define UNPACK(ARR_NAME,N) \
    BOOST_PP_TUPLE_REVERSE(UNPACK_REVERSE(ARR_NAME,N))

这是一个用法示例:

void print3(int x, int y, int z){
    printf("%d,%d,%d\n",x,y,z);
}
int main(){
    int z[3]={1,2,3};
    print3 UNPACK(z,3);
    return 0;
}

这个宏在循环中使用Boost的预处理器库来生成和扩展元组中的数组元素。希望它有所帮助。

答案 1 :(得分:1)

使用此:

int add_all(array, 4);

调用函数时,尝试将数组传递给该数组 将被转换为指向数组第一个元素的指针。

功能原型

int add_all(int[] , int size);

int add_all(int* , int size);