几天前我开始编写这段代码。我在这里看到一个问题,让我想知道变量参数列表,所以我写了(从未真正完成,但它具有我很好奇的功能)这段代码:
void VendingMachine::setStamps(int largest, ...)
{
cout << "Setting stamps to: \n";
vector<int> tmp;
vector<int>::iterator iter;
int next = largest;
va_list lst;
va_start(lst, largest);
while(next != NULL)
{
cout << next << "\n";
tmp.push_back(next);
next = va_arg(lst,int);
}
va_end(lst);
stamps = new int[tmp.size()-1];
int i = 0;
for(iter = tmp.begin(); iter != tmp.end();)
{
stamps[i] = *iter;
iter++;
i++;
}
cout << "The array is now: ";
showStamps();
}
void VendingMachine::showStamps()
{
cout << sizeof(stamps) << " " << sizeof(*stamps);
for(int i = 0; i < NUM_OF(stamps); i++)
cout << stamps[i] << ", ";
cout << "\n";
}
现在,我期望 setStamps 永远不会完成。或者至少需要很长的时间和可变的时间,因为列表的任何部分都不能保证为 NULL,除非它被提供。事实并非如此。我调用 setStampsv.setStamps(90,30,24,15,12,10,5,3,2,1);
并打印出来:
将标记设置为:
90
30
24
15
12
10
5
3
2
1
-217832717
数组现在是:4 490,
忽略最后一行,因为那是我试图弄清楚如何确定数组的长度,这是没有意义的。它在传递的参数之外的第一个值之后停止。它应该一直持续到出现 NULL 值,并且每次都不应该有一个在同一个地方。但结果总是一样的:90、30、24、15、12、10、5、3、2、1,[每次都会改变的数字]。从来没有任何额外的价值。这是一个谜。