我不知道';我对stack有些不了解
我正在读一篇关于堆栈的文章。但我不理解下面的句子:由于堆栈增长,第一个参数将存储在最低的地址(这种参数反转在历史上用于允许函数传递可变数量的参数) 我的问题是:我认为即使参数没有被存储,我们仍然可以允许传递数量可变的参数。例如,我不知道';我对stack有些不了解,c,C,我正在读一篇关于堆栈的文章。但我不理解下面的句子:由于堆栈增长,第一个参数将存储在最低的地址(这种参数反转在历史上用于允许函数传递可变数量的参数) 我的问题是:我认为即使参数没有被存储,我们仍然可以允许传递数量可变的参数。例如,sp=sp-4,然后我们将第一个参数的值推送到堆栈上,然后我们执行另一个sp=sp-4和推第二个参数,依此类推 谢谢 问题是:函数必须知道第一个参数在哪里,而不是有多少个参数 想象一下你有 void fx(int, ...); 及 想象一下,在调用之前,堆栈(按您想要的
sp=sp-4
,然后我们将第一个参数的值推送到堆栈上
,然后我们执行另一个sp=sp-4
和推第二个参数
,依此类推
谢谢 问题是:函数必须知道第一个参数在哪里,而不是有多少个参数 想象一下你有
void fx(int, ...);
及
想象一下,在调用之前,堆栈(按您想要的方向增长)具有“xy”
如果将反向推堆栈将变为“X Y 42-1 2”或“X Y 2 2 42-1 5”,代码很容易拾取第一个参数:堆栈顶部的对象您完全正确。堆栈的性质无关紧要。请看我对类似问题的回答
fx(2, -1, 42) /* 2 indicates 2 more arguments */;
fx(5, -1, 42, 2, 2, 2);