![](/img/trans.png)
[英]How do I pass a function AND a variable list of arguments to another function in C?
[英]C language: How to pass a variable arguments list of void* to a function
我試圖將void *元素的可變參數列表傳遞給C中的函數。
我該怎么做呢?
如何計算列表中的項目數?
如何遍歷var-args列表,並將每個void *項目傳遞給另一個將void *項目作為參數的函數?
這是我所做的,但是沒有用。
void AddValues(List* data, void* args, ...) {
int len = sizeof (args) / sizeof (*args);
for(int i=0;i<len;i++){ processItem(args[0]); }
}
void processItem(void* item){
}
如何計算列表中的項目數?
你不能 必須提供或派生它。
如何循環遍歷var-args列表,並將每個void項目傳遞給另一個將void *項目作為參數的函數?*
如可變參數函數中所述 ,
#include <stdarg.h>
void AddValues(int count, ...) {
va_list args;
va_start(args, count);
for(int i=count; i--; )
processItem(va_arg(args, void*));
va_end(args);
}
用法示例:
void* p1 = ...;
void* p2 = ...;
void* p3 = ...;
void* p4 = ...;
AddValues(4, p1, p2, p3, p4);
這取決於您在做什么,但您可能應該使用數組而不是可變參數。
void AddValues(int count, const void** args) {
for(int i=count; i--; )
processItem(*(args++));
}
用法示例:
#define C_ARRAY_LENGTH(a) (sizeof(a)/sizeof((a)[0]))
void* ptrs[4];
ptrs[0] = ...;
ptrs[1] = ...;
ptrs[2] = ...;
ptrs[3] = ...;
AddValues(C_ARRAY_LEN(ptrs), ptrs);
或(如果指針不能為NULL):
void AddValues(const void** args) {
while (*args != NULL)
processItem(*(args++));
}
用法示例:
void* ptrs[5];
ptrs[0] = ...;
ptrs[1] = ...;
ptrs[2] = ...;
ptrs[3] = ...;
ptrs[4] = NULL;
AddValues(ptrs);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.