我曾在C數組:如何將數組的總元素作爲函數的位置參數傳遞?
int array[] = {1, 2, 3, 4};
,我有一個功能的樣機是這樣的:
int add_all(int a, int b, int c, int d);
但我怎麼能傳遞數組的所有元素作爲函數的參數在同一時間?
我知道蟒蛇,這可以這樣進行:
array=[1,2,3,4]
add_all(*array)
有人能告訴我如何實現在C相同的效果?
我曾在C數組:如何將數組的總元素作爲函數的位置參數傳遞?
int array[] = {1, 2, 3, 4};
,我有一個功能的樣機是這樣的:
int add_all(int a, int b, int c, int d);
但我怎麼能傳遞數組的所有元素作爲函數的參數在同一時間?
我知道蟒蛇,這可以這樣進行:
array=[1,2,3,4]
add_all(*array)
有人能告訴我如何實現在C相同的效果?
使用此:
int add_all(array, 4);
當調用一個函數,並嘗試把它傳遞一個數組,該數組 將被轉換爲一個指針數組的第一個元素。
函數原型
int add_all(int[] , int size);
或
int add_all(int* , int size);
試試這個:
#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的預處理程序庫來生成並展開元組中的數組元素。希望能幫助到你。
@ AhmedM.Farrag添加與問題無關的標籤,因此您可以發佈依賴於該標籤的答案並不好。 – 2501
@ 2501:好的。得到它了。 –