簡體   English   中英

C語言:如何將void *的可變參數列表傳遞給函數

[英]C language: How to pass a variable arguments list of void* to a function

我試圖將void *元素的可變參數列表傳遞給C中的函數。

  1. 我該怎么做呢?

  2. 如何計算列表中的項目數?

  3. 如何遍歷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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM