使用可变参数函数将整数和/或整数数组放入单个 int 数组中
Integers and/or array of integers into a single int array using variadic function
我正在尝试编写一个函数,该函数具有可变数量的整数/整数数组参数,将所有元素连接成一个一维数组。我正在努力应对两种情况之一,其中current_item结果是一个数组而不仅仅是一个整数。如何访问此数组的各个元素并将它们分配给 pOutList?
typedef unsigned short WORD;
int PinListJoin(WORD * pOutList, ...) {
int index=0;
boolean isArray = false;
va_list next_item;
va_start(next_item, pOutList);
WORD current_item = va_arg(next_item, WORD);
int current_item_size = sizeof(current_item) / sizeof(WORD);
if (current_item_size > 1) {
isArray = true;
for (int pinidx = 0; pinidx < current_item_size; pinidx++) {
pOutList[index] = current_item;
index++;
}
}
else {
isArray = false;
pOutList[index] = current_item;
index++;
}
va_end(next_item);
return(current_item_size);
}
boolean isArray = false;
C++中没有boolean
数据类型。
此外,函数中从未使用isArray
和index
变量的值。
typedef unsigned short WORD; WORD current_item = va_arg(next_item, WORD);
这是行不通的。提倡可变参数。unsigned short
提升为int
(通常;在某些奇特的系统上,它可能unsigned int
(。将非升级类型与va_arg
一起使用将导致未定义的行为。您可以使用这样的技巧来获取任何系统的正确类型:
using promoted_word = decltype(+WORD(0));
WORD current_item = WORD(va_arg(next_item, promoted_word));
WORD current_item = va_arg(next_item, WORD); int current_item_size = sizeof(current_item) / sizeof(WORD);
WORD
的大小除以WORD
的大小始终为 1。这样做是没有意义的。
我正在努力解决两种情况之一,其中current_item结果是一个数组而不仅仅是一个整数。如何访问此数组的各个元素并将它们分配给 pOutList?
函数参数不能是数组。但它可以是指向数组元素的指针,我认为这就是你的意思。如果是这种情况,那么你可以像这样从 varargs 中获取指针:
WORD* current_item = va_arg(next_item, WORD*);
然后,您可以将元素从一个数组复制到另一个数组,就像使用指向元素的任何指针一样。
不过仍然存在两个问题:1.无法根据该指针找出数组的大小,2.没有办法找出传递了什么类型的参数(即它是a(指针指向a(n数组还是整数(。您可以查看printf
的界面,了解如何解决该问题。它在那里使用指定这些类型的格式字符串来解决。数组的长度通过使用哨兵值(空终止符(来解决。另一种方法是将长度作为单独的参数传递。
更一般地说:我建议您不要在C++中使用 C 样式的 varargs。搬起石头砸自己的脚太容易了。可变参数模板是实现类似事情的更安全、更强大的方式。
也就是说,我不太明白你想做什么,所以我无法确认使用任何形式的变数是否有意义。
- C++使用整数的压缩数组初始化对象
- 在一定长度后从数组中打印时缺少整数
- 是否基于数组B整数打印数组A中的整数
- 检查TCHAR数组输入是否为带符号整数C++
- 如何将以逗号和空格分隔的整数读取到 2D 数组中?
- 从二进制文件中读取整数数组
- 整数区间(或 int 数组)中每个数字的出现次数
- 新的整数数组向右移动?
- C++ 中的二维整数数组,每行中的元素数量不均匀
- 在数组中输入 n 个整数的列表,并以类似于钟摆来回移动的方式排列它们. 输入-1 3 2 5 4,输出5 3 1 2 4
- 给定一个整数数组,需要在Max_Heap上运行操作。得到错误"segmentation fault",有什么想法吗?(C++)
- 为什么在我的 main 函数中声明整数后我的整数数组中会出现错误?
- 如何将字符串和整数读取到两个单独的动态数组中的程序编写?
- 在 C++ 中将整数数组转换为位集表示形式的最佳方法?
- C++数组输入不接受一定数量的整数
- 从两个 4x64 位整数数组中获取取模
- 如何计算数组整数的总可能组合
- 2D 字符串数组 C++:整数串联成字符串
- 将数组整数2除以偶数和
- 将2d数组整数数据从c++发送到qml